【发布时间】:2014-08-27 18:14:03
【问题描述】:
我正在尝试使用这些 URL 返回的 JSON:
http://maps.googleapis.com/maps/api/geocode/json?latlng=12.0,12.0&sensor=false
这是我所做的:
$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=12.0,12.0&sensor=false';
$data = json_decode( file_get_contents( $url ), true );
print_r( $data );
这是输出:
Array (
[0] => Array (
[address_components] => Array (
[0] => Array (
[long_name] => Chungul Jabarari-Dabalam-Jajere Road
[short_name] => Chungul Jabarari-Dabalam-Jajere Road
[types] => Array ( [0] => route ) )
[1] => Array (
[long_name] => Yobe [short_name] => Yobe
[types] => Array (
[0] => administrative_area_level_1
[1] => political ) )
[2] => Array (
[long_name] => Nigeria
[short_name] => NG
[types] => Array (
[0] => country
[1] => political ) )
....
如您所见,address_components 在[0] 之下,这使得在数组数量未知时很难使用此结果集。
假设我想获得administrative_area_level_2,这是美国的县,但在尼日利亚显然不存在?
假设我想访问美国的['results'][0]['address_components'][6],但尼日利亚的['results'][0]['address_components'][3]
我要求的是当子数组的数量不可靠时访问该数组中每个数据元素的有效方法。
(或者更好地解码 JSON 以生成一个没有这些无用索引并且只是一个纯关联数组的数组。)
【问题讨论】:
-
使用
var_dump检查$data;也就是说,$data 现在包含一个 normal PHP 数组/映射。由于 JSON 只是 文本标记,因此不再涉及 “JSON”。当提出此类问题时,请确保在问题本身中包含一个最小且相关的示例(重现行为/问题)。 -
它不能作为json解码返回一个对象。你不能把它当作数组处理
-
@user2864740 和其他人,更改了问题以希望更好地解释问题。
-
stackoverflow.com/questions/8727981/…。行政区域级别 2 之类的东西在所有国家/地区都没有固定的定义。您想基于此查找的原因是什么?
-
当您不知道 json 的结构时,您需要实现递归逻辑来解析该数据。它应该检查它是一个数组还是一个值