如何像对象一样操纵Json响应?

时间:2010-03-16 14:07:00

标签: jquery ajax json

我的jQuery.ajax返回JSon对象。我首先阅读其他文章。但他们的回应文字不喜欢我的。 我的回复内容:来自firebug回复

{"item":"[{\"country\":\"USA\",\"lan\":\"EN\"},{\"country\":\"Turkiye\",\"lan\":\"TR\"}]"}

现在我试图提醒countryName:

$('#loadData').click(function() {
            $.ajax({
                type: "POST",
                url: "WS/myWS.asmx/getDaa",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                $("#jsonResponse").html(msg);
                    $.each(msg.item, function(i, d) {
                        alert(this.country);
                        debugger;
                    });
                },
            });
        });

但警告“undefined”

3 个答案:

答案 0 :(得分:9)

item的值是一个字符串。因此,您首先需要将其解析为json。试试这个。

$("#jsonResponse").html(msg);
    var item = jQuery.parseJSON(msg.item)
    $.each(item, function(i, d) {
        alert(this.country);
        debugger;
    });
},

答案 1 :(得分:7)

{"item":"[{\"country\":\"USA\",\"lan\":\"EN\"},{\"country\":\"Turkiye\",\"lan\":\"TR\"}]"}
        ^
        |
        +---- It's a string, not an array !

您的JSON应该看起来像

{"item":[ {"country":"USA","lan":"EN"},{"country":"Turkiye","lan":"TR"}]}

然后您可以像

一样访问它
country = msg.item[0];
lang    = country.lan;

for (i=0; i< item.length; i++) { alert ( item[i].country); }

等...

答案 2 :(得分:2)

原因是msg.item是一个字符串。

它是字符串的原因是item:之后的初始双引号。这也解释了为什么你的双引号被转义。你有:

{"item":"[{\"country\":\"USA\",\"lan\":\"EN\"},{\"country\":\"Turkiye\",\"lan\":\"TR\"}]"}

当你应该:

{"item":[{"country":"USA","lan":"EN"},{"country":"Turkiye","lan":"TR"}]"}