2009-04-29 18 views
55

Sto restituendo un elenco <> da un servizio Web come elenco di oggetti JSON. Sto cercando di utilizzare un ciclo for per scorrere l'elenco e acquisire i valori dalle proprietà. Questo è un esempio della JSON ritorno:Ciclo attraverso l'oggetto JSON Elenco

{"d":[{"__type":"FluentWeb.DTO.EmployeeOrder", 
"EmployeeName":"Janet Leverling", 
"EmployeeTitle":"Sales Representative", 
"RequiredDate":"\/Date(839224800000)\/", 
"OrderedProducts":null}]} 

Così sto cercando di estrarre il contenuto utilizzando qualcosa di simile:

function PrintResults(result) { 

for (var i = 0; i < result.length; i++) { 
    alert(result.employeename); 
} 

Come si dovrebbe fare?

+0

IN Java, è necessario mappare il JSON in POJO. Una volta fatto, puoi recuperare qualsiasi valore.Se la sua lista allora itera (loop) e ottiene il valore json tramite l'oggetto – Pavan

risposta

51

ha avuto lo stesso problema di oggi, L'argomento mi ha aiutato quindi ecco qui la soluzione;)

alert(result.d[0].EmployeeTitle); 
+4

Grazie. Questa è la conclusione alla quale sono arrivato. Ecco un ottimo post che ha la soluzione dettagliata. http://elegantcode.com/2009/05/04/jquery-ajax-with-class-arrays/ Spero che questo aiuti gli altri. – Nick

+0

il link nel commento sopra è morto – seinecle

+2

il link nel commento sopra è non morto – kojow7

64

Fare attenzione, d è l'elenco.

for (var i = 0; i < result.d.length; i++) { 
    alert(result.d[i].employeename); 
} 
+0

Grazie .. ma non restituisce nulla neanche. – Nick

+1

Dovrebbe. È corretto. JavaScript è case sensitive. EmployeeName –

16

È vicino! Prova questo:

for (var prop in result) { 
    if (result.hasOwnProperty(prop)) { 
     alert(result[prop]); 
    } 
} 

Aggiornamento:

Se il risultato è davvero è un array di un oggetto, allora si potrebbe avere a che fare questo:

for (var prop in result[0]) { 
    if (result[0].hasOwnProperty(prop)) { 
     alert(result[0][prop]); 
    } 
} 

Oppure, se si desidera collegare attraverso ogni risultato nella matrice se non ci sono più, provare:

for (var i = 0; i < results.length; i++) { 
    for (var prop in result[i]) { 
     if (result[i].hasOwnProperty(prop)) { 
      alert(result[i][prop]); 
     } 
    } 
} 
+1

Questo mi avvicina .. Ancora solo avvisi con [oggetto oggetto], [oggetto oggetto] .... – Nick

8

Dal momento che si sta utilizzando jQuery, si potrebbe anche utilizzare il ciascuna meto d ... Inoltre, sembra che tutto sia un valore della proprietà 'd' in questo oggetto JS [Notation].

$.each(result.d,function(i) { 
    // In case there are several values in the array 'd' 
    $.each(this,function(j) { 
     // Apparently doesn't work... 
     alert(this.EmployeeName); 
     // What about this? 
     alert(result.d[i][j]['EmployeeName']); 
     // Or this? 
     alert(result.d[i][j].EmployeeName); 
    }); 
}); 

Che dovrebbe funzionare. se no, allora forse puoi darci un esempio più lungo del JSON.

Modifica: Se nessuna di queste cose funziona, sto iniziando a pensare che potrebbe esserci qualcosa di sbagliato nella sintassi del JSON.

+0

Ho trovato la soluzione nel modo più difficile (non JQuery). Ci proverò appena possibile. Preferirei farlo a modo tuo. Mi assicurerò di pubblicare la soluzione. – Nick

+0

Quindi molto, molto vicino. Ora sto scorrendo la matrice di oggetti. In FireBug posso vedere i valori nelle proprietà ma l'avviso restituisce "Non definito". Come posso ottenere la stringa, le date, ecc. Dalle proprietà? – Nick

15

Eccolo:

success: 
    function(data) { 
     $.each(data, function(i, item){ 
      alert("Mine is " + i + "|" + item.title + "|" + item.key); 
     }); 
    } 

Esempio di testo JSON:

{"title": "camp crowhouse", 
"key": "agtnZW90YWdkZXYyMXIKCxIEUG9zdBgUDA"} 
1

ho la seguente chiamata:

$('#select_box_id').change(function() { 
     var action = $('#my_form').attr('action'); 
    $.get(action,{},function(response){ 
     $.each(response.result,function(i) { 

      alert("key is: " + i + ", val is: " + response.result[i]); 

     }); 
    }, 'json'); 
    }); 

La struttura di ritorno da l'aspetto del server come:

{"result":{"1":"waterskiing","2":"canoeing","18":"windsurfing"}} 
6
var d = $.parseJSON(result.d); 
for(var i =0;i<d.length;i++){ 
    alert(d[i].EmployeeName); 
} 
+1

Potresti aggiungere una breve spiegazione con il codice? – jonsca

+0

qui controllare il seguente link spero che aiuti http://encosia.com/never-worry-about-asp-net-ajaxs-d-again/ –

1

Questo funziona!

$(document).ready(function() 
    { 
     $.ajax(
      { 
      type: 'POST', 
      url: "/Home/MethodName", 
      success: function (data) { 
       //data is the string that the method returns in a json format, but in string 
       var jsonData = JSON.parse(data); //This converts the string to json 

       for (var i = 0; i < jsonData.length; i++) //The json object has lenght 
       { 
        var object = jsonData[i]; //You are in the current object 
        $('#olListId').append('<li class="someclass>' + object.Atributte + '</li>'); //now you access the property. 

       } 

       /* JSON EXAMPLE 
       [{ "Atributte": "value" }, 
       { "Atributte": "value" }, 
       { "Atributte": "value" }] 
       */ 
      } 
     }); 
    }); 

La cosa principale di questo utilizza la proprietà esattamente lo stesso come attributo della coppia valore-chiave JSON.

+0

Che ne dici? Penso che ora sia spiegato meglio. –

+1

Meglio - senza le urla, pure. In bocca al lupo! – Mogsdad