如何访问json数据返回中的嵌套数组?
这是对上一个问题的一个非常轻微的重复,有一个重要的区别。我有一个JSON数据返回如下:如何访问json数据返回中的嵌套数组?
{
"api_id": "89881d38-5657-11e4-a2d1-22000ac5040c",
"country": "Czech Republic",
"country_code": 420,
"country_iso": "CZ",
"message": {
"inbound": {
"rate": "0.00000"
},
"outbound": {
"rate": "0.05900"
},
"outbound_networks_list": [
{
"group_name": "Czech Republic-Telefonica O2",
"rate": "0.06800"
},
{
"group_name": "Czech Republic-T-Mobile ",
"rate": "0.06800"
},
{
"group_name": "Czech Republic-U:fon",
"rate": "0.05900"
},
{
"group_name": "Czech Republic-Vodafone ",
"rate": "0.05900"
}
]
},
"phone_numbers": {
"local": {
"rate": "0.80000"
},
"tollfree": {
"rate": null
}
},
"voice": {
"inbound": {
"ip": {
"rate": "0.00300"
},
"local": {
"rate": "0.00500"
},
"tollfree": {
"rate": null
}
},
"outbound": {
"ip": {
"rate": "0.00300"
},
"local": {
"rate": "0.02940"
},
"rates": [
{
"prefix": [
"420608",
"4207040",
"4207047",
"42077",
"420967"
],
"rate": "0.02940"
},
{
"prefix": [
"420601",
"420602",
"420603",
"420604",
"420605",
"420606",
"420607",
"420702",
"420703",
"42070300",
"420705",
"42072",
"42073",
"42077273",
"42079",
"42079083",
"4207920",
"4207921",
"4207922",
"4207923",
"4207924",
"4207925",
"42079950",
"42079951",
"420840",
"420841",
"420842",
"420847",
"420848",
"420849",
"42093",
"420961",
"420962",
"420963",
"420964",
"420965",
"420966"
],
"rate": "0.03010"
},
{
"prefix": [
"420",
"4202"
],
"rate": "0.03930"
}
],
"tollfree": {
"rate": null
}
}
}
}
我可以访问“phone_numbers.voice.outbound.local.rate”与这段代码:
$.each(data, function(key, value) {
//code omitted for convenience
txt += '<p>Make calls : '+ round((parseFloat(data.voice.outbound.local.rate * 100) + 3.0),2) +' cents per minute</p>';
}
但是,当我套用同样的逻辑到嵌套阵列,其中“前缀”位出现我得到一个未定义的错误信息,所以:
txt += '<p>Prefix: '+ data.["rates"]["prefix"] +'</p>';
返回“未定义”,类似地:
txt += '<p>Prefix: '+ data.rates.prefix +'</p>';
也失败。我希望能够访问json返回的那部分内容,并遍历每个前缀数字并打印它旁边的比率。所以我们有,例如:
<div>
<p> Prefix: 420608 Rate: 0.02940 </p>
</div>
与往常一样,所有帮助感激地收到。谢谢。
这是data.voice.outbound.rates
。由于这是一组对象,因此您需要对它进行迭代。然后prefix
也是一个数组,因此您需要一个嵌套循环:
$.each(data.voice.outbound.rates, function(i, prefix_rate) {
var rate = prefix_rate.rate;
$.each(prefix_rate.prefix, function(j, prefix) {
txt += '<p>Prefix: ' + prefix + ' Rate: ' + rate + '</p>';
});
});
谢谢,但我仍然得到一个错误:TypeError:this.outbound_networks_list未定义 – user1903663 2014-10-18 00:30:04
我刚刚纠正它。 – Barmar 2014-10-18 00:30:14
只是测试... – user1903663 2014-10-18 00:33:29
您不要在'['之前放'''。它可以是'data.rates'或'data [“rates”]''。 – Barmar 2014-10-18 00:23:20
虽然这将是一个语法错误,而不是报告的结果。 – user2864740 2014-10-18 00:23:52
'data.rates [0] .prefix'可能会在某处(注意rates是一个* array *的对象) – user2864740 2014-10-18 00:24:52