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

3

我使用jQuery.ajax返回JSon对象。我首先阅读了其他文章,但它们的响应文本与我的不同。 我的响应内容:来自Firebug响应。

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

现在我正在尝试弹出国家名称:

$('#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"


你尝试过只打印一个值吗?像alert(msg.lang)这样?它有效吗?还有,为什么你的JSON数据被转义了?另外,不要使用$.each(),而是使用for(key in msg){alert(key + ':' + msg[key]);}。在这里看一下https://dev59.com/_UzSa4cB1Zd3GeqPllXm#2373648 - Keyne Viana
3个回答

9

item的值是一个字符串。因此,您需要首先将其解析为json格式。尝试使用以下方法:

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

2
注意,您的jquery调用期望JSON响应(dataType:“json”),jquery会为您解析它。正确的解决方案不是再次使用parseJSON解析它(即使在这种情况下它起作用),而是在您的脚本“WS/myWS.asmx/getDaa”中输出正确的JSON。 - David V.
@David-V:好的,我正在分析这个问题。我在C#中使用了JSonSerializer()方法,并得到了以下结果。 - loviji

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); }

etc...


2

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

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

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

当您需要:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接