如何使用jQuery循环JSON?

时间:2015-02-20 18:04:57

标签: jquery json

我已经看过很多关于这个主题的网站,但我无法获得任何适合我的示例和说明。

我想使用jQuery循环一些JSON。在下面的JSON示例中,我想输出“model-1”,然后只输出“origin”。一旦完成,那么我会为下一个条目做同样的事情,在这种情况下是“模型-2”。这可能会持续数百次,直到完成,因此我无法通过名称专门调用条目(“model-1”,“model-2”,“model-3”等)。

{
    "model-1": {
        "origin": "Japan",
        "price": "$149",
        "availability": "Available"
    },
    "model-2": {
        "origin": "USA",
        "price": "$199",
        "availability": "Available"
    }
}

这是我到目前为止所做的代码。

jQuery(function($) {
    $.getJSON('/mydata.json', function(data) {

      var obj = jQuery.parseJSON(data);

    });
});

我会添加更多的代码,包括我的循环,但实际上我没有尝试过的任何东西给了我很好的结果。要么我什么都没得到,它就会破裂,或者我得到一堆'未定义的'。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

只需使用 for ... in 循环,然后循环浏览obj

$.getJSON('/mydata.json', function(data) {

  var obj = jQuery.parseJSON(data);
  for(j in obj)
    {
     console.log(obj[j].origin);
    }

});

答案 1 :(得分:1)

您可以使用$.each来迭代模型:

$.each(data, function(model, value) {
    var origin = value.origin;
    // use model and origin
});

但是模型不会按原始顺序排列,因为Javascript对象属性在从JSON加载时不保留顺序。如果您需要保留订单,则必须在顶层有一个数组:

[
    {
        "model": "model-1",
        "origin": "Japan",
        "price": "$149",
        "availability": "Available"
    },
    {
        "model": "model-2"
        "origin": "USA",
        "price": "$199",
        "availability": "Available"
    }
]

您可以再次使用$.each进行迭代:

$.each(data, function (index, item) {
    var model = item.model,
        origin = item.origin;
    // do whatever you need with model and origin
});

(同时$.getJSON已经为您的函数提供了已解析的结构,因此您无需在那里JSON.parse / $.parseJSON

答案 2 :(得分:1)

您不需要解析JSON。仅当您专门提取文本(使用ajax方法并设置dataType属性)或使用自动检测(使用ajax方法而不设置{{1 ()属性)并且服务器使用错误的MIME类型返回它。 dataType方法是getJSON方法的包装器,ajax设置为JSON,因此它会自动解析响应。

将使用包含已解析为对象的响应的参数调用回调函数,以便您可以遍历它。例如:

dataType

请注意,未指定对象中属性的顺序。上面的代码实际上会根据使用的浏览器以不同的顺序显示项目。

答案 3 :(得分:0)

使用.each

通用迭代器函数,可用于无缝迭代对象和数组

http://api.jquery.com/jquery.each/

http://www.mkyong.com/jquery/jquery-loop-over-json-string-each-example/

答案 4 :(得分:0)

for (... in ...)循环结构在这里是理想的。这就是它的样子:

$.getJSON('/mydata.json', function(data) {
    var obj = jQuery.parseJSON(data);

    for (var prop in obj) {
        console.log(obj[prop].origin);
    }
});

使用for (... in ...)结构时,循环遍历指定对象上所有属性的键。 prop将首先是" model-1",然后" model-2",依此类推。因此,您可以通过该密钥访问该属性,然后从那里获得origin