jQuery解析JSON数组

29

我有一个如下的JSON输出:

["City1","City2","City3"]

我想获取每个城市的名称,我该怎么做?
$.getJSON("url_with_json_here",function(json){

});

EDIT:

$.getJSON('url_here', function(data){
    $.each(data, function (index, value) {
      $('#results').append('<p>'+value+'</p>');
        console.log(value);
    });
});

上述方法似乎没有效果,没有任何值被输出。

你是在使用 getJSON() 来获取 JSON 吗?因为那样它应该已经被获取了。没有任何代码示例很难提供帮助。你是那么新手,从未编写过任何代码吗? - kapa
请看我的编辑,我只是困惑如何从URL中检索项目。 - David Cahill
5个回答

56

getJSON()在获取数据后也会对JSON进行解析,因此您从那时起,将使用一个简单的Javascript数组([]表示JSON中的数组)。文档还提供了处理获取数据的示例。

您可以使用for循环遍历数组中的所有值:

$.getJSON("url_with_json_here", function(data){
    for (var i = 0, len = data.length; i < len; i++) {
        console.log(data[i]);
    }
});

请检查你的控制台以查看输出 (Chrome, Firefox/Firebug, IE)。

jQuery 还提供了 $.each() 用于迭代,因此您也可以这样做:

$.getJSON("url_with_json_here", function(data){
    $.each(data, function (index, value) {
        console.log(value);
    });
});

我在使用OP的数组时,通过$.each($.parseJSON(data), function (index, value)取得了更好的运行结果。 - secretwep
@secretwep 这里运气不是一个因素。getJSON()已经解析了JSON,实际上它会为您调用parseJSON()方法。 - kapa
@kapa 我原以为它也会调用 parseJSON,但如果我不包括 $.parseJSON(),我会得到一个控制台错误: Uncaught TypeError: Cannot use 'in' operator to search for 'length' in ["City1","City2","City3"] 在jquery-2.2.0中。所以不考虑运气、随机过程或恶魔召唤,我的环境中肯定还有其他问题。 - secretwep
@secretwep 如果不知道你的环境,很难说。我相信这不是jQuery的问题。提一个SO问题,别忘了添加足够的细节。 - kapa
根据经验,根据您使用的jQuery版本,自动JSON解析可能会在某些情况下悄悄失败,返回一个字符串。确保从服务器端脚本以正确的“application/json”内容类型返回数据。还要确保返回的JSON字符串是有效的:例如,额外的逗号可能会在一个浏览器/函数中解析,但在其他浏览器/函数中失败。 - DarthJDG
显示剩余4条评论

32

使用parseJSON方法

var json = '["City1","City2","City3"]';
var arr = $.parseJSON(json);

那么你就有一个包含城市名称的数组。


非常感谢。如果我使用上面的代码与$.getJSON方法一起,那么这段代码会在成功从URL获取JSON后运行吗? - David Cahill
1
如果你正在使用 AJAX 获取 JSON 数据,那么你应该指定数据类型为 JSON。然后它将自动解析,成功回调将得到一个对象或数组,而不是一个字符串。如果你使用 getJSON 方法,则数据类型会自动设置为 JSON,因此你不需要解析结果。 - Guffa
这正是我需要的。 我已经在会话中拥有了JSON字符串,不需要进行任何AJAX获取。谢谢。 - zkent
这个处理方式与接受的答案结合起来,更好地处理了提问者的数组。 - secretwep

9
var dataArray = [];
var obj = jQuery.parseJSON(yourInput);

$.each(obj, function (index, value) {
    dataArray.push([value["yourID"].toString(), value["yourValue"] ]);
});

这对我非常有帮助 :-)


1
使用 parse.JSON
var obj = jQuery.parseJSON( '{ "name": "John" }' );
alert( obj.name === "John" );

1
var dataArray = [];
var obj = jQuery.parseJSON(response);
  for( key in obj ) 
  dataArray.push([key.toString(), obj [key]]);
};

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