为什么 JSON 在输出中有额外的方括号


Why does JSON have extra square bracket in output?

我的 JSON(解码)在subdivisions部分后面有额外的方括号,所以我不能像使用 $resultArray['country']['geoname_id']; 来定位其他部分那样定位它。为什么那里多了一对方括号?

string(1461) "{"country":{"iso_code":"CA","names":{"pt-BR":"Canadá","es":"Canadá","ru":"Канада","en":"Canada","zh-CN":"加拿大","fr":"Canada","de":"Kanada","ja":"カナダ"},"confidence":99,"geoname_id":6251999},"location":{"longitude":-79.4886,"latitude":43.7496,"time_zone":"America/Toronto","accuracy_radius":10},"subdivisions":[{"iso_code":"ON","names":{"en":"Ontario","zh-CN":"安大略","pt-BR":"Ontário","ja":"オンタリオ州","ru":"Онтарио"},"confidence":93,"geoname_id":6093943}],"postal":{"confidence":17,"code":"M3J"},.....

我指的是

"subdivisions":[{"iso_code":"ON"

这部分,也是最后的那部分。为什么细分是唯一有方括号的东西?

细分它是一个

数组,在 JSON 中,这些是对象:

{key:value}

这些是数组:

[{key1:value1},{key2:value2}]

就像javascript一样。所以在这种情况下,细分可以有多个值,如果你用 json_decode() 在 PHP 中解码它,你会得到一个包含一个对象的数组。

如果使用 $data = json_decode($string, true);//set true 作为关联数组,则得到:

array (
  'country' => 
  array (
    'iso_code' => 'CA',
    'names' => 
    array (
      'pt-BR' => 'Canadá',
      'es' => 'Canadá',
      'ru' => 'Канада',
      'en' => 'Canada',
      'zh-CN' => '加拿大',
      'fr' => 'Canada',
      'de' => 'Kanada',
      'ja' => 'カナダ',
    ),
    'confidence' => 99,
    'geoname_id' => 6251999,
  ),
  'location' => 
  array (
    'longitude' => -79.4886000000000052523319027386605739593505859375,
    'latitude' => 43.7496000000000009322320693172514438629150390625,
    'time_zone' => 'America/Toronto',
    'accuracy_radius' => 10,
  ),
  'subdivisions' => 
  array (
    0 => 
    array (
      'iso_code' => 'ON',
      'names' => 
      array (
        'en' => 'Ontario',
        'zh-CN' => '安大略',
        'pt-BR' => 'Ontário',
        'ja' => 'オンタリオ州',
        'ru' => 'Онтарио',
      ),
      'confidence' => 93,
      'geoname_id' => 6093943,
    ),
  ),
  'postal' => 
  array (
    'confidence' => 17,
    'code' => 'M3J',
  ),
)

访问数据:

$data['subdivisions'][0]['iso_code'];
$data['subdivisions'][0]['names']['en'];

在实现您正在执行的操作之前,您可能需要分析 json,以查看您是否在细分中获得多个值