我有一个从api调用返回的json数组,如下所示:
["meta", {"previous"=>nil, "total_count"=>12, "offset"=>0, "limit"=>1, "next"=>"/v1/Account/MAMTE4MTHJNJRKODBIMD/AvailableNumberGroup/?prefix=415&limit=1&country_iso=US®ion=NY&offset=1"}]["api_id", "441d610c-bede-11e2-815d-22000abcc0e1"]["objects", [{"stock"=>57, "voice_enabled"=>true, "region"=>"New York, UNITED STATES", "voice_rate"=>"0.00900", "prefix"=>"631", "sms_rate"=>"0.00800", "number_type"=>"local", "setup_rate"=>"0.00000", "rental_rate"=>"0.80000", "group_id"=>"11411650673450", "sms_enabled"=>true, "resource_uri"=>"/v1/Account/MAMTE4MTHODBIMD/AvailableNumberGroup/11411650673450/"}]]
我可以用这个
打印整个数组success: function(response){
$.each([response], function(i, objects) {
var list = "<li>" + objects + "</li>";
$('#result').append(list);
});
如何提取指定的项目并在<li> .. </li>
中打印它们以列出一些但不是所有元素的列表?
非常感谢!
答案 0 :(得分:2)
您可以通过访问“i”来实现。这将具有所有JSON对象的属性。
success: function(response){
$.each([response], function(i, objects) {
var list = "<li>" + **i.previous** + "</li>";
$('#result').append(list);
});
另一个例子
var obj = {
"flammable": "inflammable",
"duh": "no duh"
};
$.each( obj, function( key, value ) {
alert( key + ": " + value );
});
出局:
flammable: inflammable
duh: no duh
答案 1 :(得分:1)
var arr = ["meta", {"previous"=>nil, "total_count"=>12, "offset"=>0, "limit"=>1, "next"=>"/v1/Account/MAMTE4MTHJNJRKODBIMD/AvailableNumberGroup/?prefix=415&limit=1&country_iso=US®ion=NY&offset=1"}]["api_id", "441d610c-bede-11e2-815d-22000abcc0e1"]["objects", [{"stock"=>57, "voice_enabled"=>true, "region"=>"New York, UNITED STATES", "voice_rate"=>"0.00900", "prefix"=>"631", "sms_rate"=>"0.00800", "number_type"=>"local", "setup_rate"=>"0.00000", "rental_rate"=>"0.80000", "group_id"=>"11411650673450", "sms_enabled"=>true, "resource_uri"=>"/v1/Account/MAMTE4MTHODBIMD/AvailableNumberGroup/11411650673450/"}]];
for(var i=0;i<arr.length;i++){
var obj = arr[i];
for(var key in obj){
var attrName = key;
var attrValue = obj[key];
//your condition goes here then append it if satisfied
var list = "<li>" + obj[key]+ "</li>";
$('#result').append(list);
}
}
感谢。
答案 2 :(得分:1)
你需要一个双重迭代,一个用于objects[]
中的每个对象,一个用于对象中的每个<key, value>
对。
例如在this demo中,使用http://plivo.com/docs/api/numbers/availablenumbergroup/
中的示例var jsonResponse = '{"meta": {"previous": null, "total_count": 1, "offset": 0, "limit": 20, "next": null }, "api_id": "26590c12-5831-11e1-86da-6ff39efcb949", "objects": [{"voice_enabled": true, "voice_rate": "1.1"}, {"voice_enabled": false, "voice_rate": "1.2"} ] }';
$('#simulateAjax').on('click', function() {
// cannot make call due to cross-domain security (and the API URL is unknown!) so just fake call the success function with valid JSON
/* $.ajax({
url: 'test.html',
dataType: 'json'
}).done(success);
*/
success($.parseJSON(jsonResponse));
function success(response) {
var items = '';
$.each(response.objects, function(index, obj) {
// obj here is one "object", we need to iterate the contents of each "obj"
$.each(obj, function(k, v) {
// k here is the key
// v is the value
items += '<li>' + k + ' : ' + v + '</li>';
});
});
$('#result').append(items);
}
return false;
});
将产生
注意:我删除了演示的每个对象中的大多数属性。此外,jQuery会在响应中自动调用$.parseJson()
,这就是我手动调用它的原因。
如果您希望每个对象出现在单个<li>
上,那么您需要在外部循环中构建<li>
并附加 k 内部$.each()
中的strong>和 v ,然后关闭</li>
,如下所示:
var item = '<li>';
$.each(obj, function(k, v) {
item += k + ' : ' + v + ', ';
});
item += '</li>';
items += item;
答案 3 :(得分:-1)
首先,这是无效的JSON,因为箭头语法=&gt;不允许,您还应该为值添加双引号。此外,语法似乎不是非常一致,看起来你在根级别有多个数组。 要使它成为JSON,您需要“key”:“value”格式,而“meta”没有值。
如果可以,您需要将其更改为:
{ "meta" : { "previous" : "nil", "total_count" : "12" (...) } }
如果您需要“meta”中的多组数据:
{ "meta" : [ { "previous" : "nil", "total_count" : "12" (...) }, (...) ] }
之后你可以做(第一个选项):
function(json) {
var key, $result = $('#result');
for (key in json.meta) {
$result.append("<li>" + json.meta[key] + "</li>")
}
}
或(第二个选项):
function(json) {
var item, key, $result = $('#result');
for (item in json.meta) {
for (key in json.meta[item]) {
$result.append("<li>" + json.meta[item][key] + "</li>")
}
}
}