如何访问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> 

与往常一样,所有帮助感激地收到。谢谢。

+0

您不要在'['之前放'''。它可以是'data.rates'或'data [“rates”]''。 – Barmar 2014-10-18 00:23:20

+0

虽然这将是一个语法错误,而不是报告的结果。 – user2864740 2014-10-18 00:23:52

+0

'data.rates [0] .prefix'可能会在某处(注意rates是一个* array *的对象) – user2864740 2014-10-18 00:24:52

这是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>'; 
    }); 
}); 
+0

谢谢,但我仍然得到一个错误:TypeError:this.outbound_networks_list未定义 – user1903663 2014-10-18 00:30:04

+0

我刚刚纠正它。 – Barmar 2014-10-18 00:30:14

+0

只是测试... – user1903663 2014-10-18 00:33:29