web-dev-qa-db-fra.com

Boucle dans la liste d'objets JSON

Je renvoie une liste <> depuis un service Web sous forme de liste d'objets JSON. J'essaie d'utiliser une boucle for pour parcourir la liste et extraire les valeurs des propriétés. Voici un exemple du code JSON renvoyé:

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

J'essaie donc d'extraire le contenu en utilisant quelque chose comme ceci:

function PrintResults(result) {

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

Comment cela devrait-il être fait?

59
Nick

a eu le même problème aujourd'hui, votre sujet m'a aidé alors voici la solution;)

 alert(result.d[0].EmployeeTitle);
52
veN

Attention, d est la liste.

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

C'est proche! Essaye ça:

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

Mise à jour:

Si votre résultat est vraiment un tableau d'un seul objet, alors vous devrez peut-être faire ceci:

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

Ou si vous voulez parcourir chaque résultat du tableau s'il y en a plus, essayez:

for (var i = 0; i < results.length; i++) {
    for (var prop in result[i]) {
        if (result[i].hasOwnProperty(prop)) {
            alert(result[i][prop]);
        }
    }
}
18
Cᴏʀʏ

C'est ici:

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

Exemple de texte JSON:

{"title": "camp crowhouse", 
"key": "agtnZW90YWdkZXYyMXIKCxIEUG9zdBgUDA"}
15
redcrowe

Puisque vous utilisez jQuery, vous pouvez aussi bien utiliser chaque méthode ... De plus, il semble que tout est une valeur de la propriété 'd' dans cet objet 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);
    });
});

Cela devrait fonctionner. sinon, vous pouvez peut-être nous donner un exemple plus long du JSON.

Edit: Si rien de tout cela ne fonctionne, je commence à penser qu'il pourrait y avoir un problème avec la syntaxe de votre JSON.

8
KyleFarris
var d = $.parseJSON(result.d);
for(var i =0;i<d.length;i++){
    alert(d[i].EmployeeName);
}
6
Denzil Sequeira

Cela fonctionnera!

$(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" }]
                */
            }
        });
    });

Le principal est d’utiliser la propriété exactement comme l’attribut de la paire clé-valeur JSON.

2
Sterling Diaz

J'ai l'appel suivant:

$('#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 structure qui revient du serveur ressemble à ceci:

{"result":{"1":"waterskiing","2":"canoeing","18":"windsurfing"}}
1
ramonhimera