我已经看过很多关于这个主题的网站,但我无法获得任何适合我的示例和说明。
我想使用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);
});
});
我会添加更多的代码,包括我的循环,但实际上我没有尝试过的任何东西给了我很好的结果。要么我什么都没得到,它就会破裂,或者我得到一堆'未定义的'。任何帮助将不胜感激。
答案 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
。