PHP解析嵌套JSON数组:如何获取距离与时长数值?
如何从Google Maps API返回的JSON中提取distance和duration的value值?
我拿到了这样一段Google Maps API返回的JSON数据:
{ "destination_addresses": [ "67-89 Pacific St, Brooklyn, NY 11201, USA" ], "origin_addresses": [ "566 Vermont St, Brooklyn, NY 11207, USA" ], "rows": [ { "elements": [ { "distance": { "text": "6.5 mi", "value": 10423 }, "duration": { "text": "35 mins", "value": 2076 }, "status": "OK" } ] } ], "status": "OK" }
我已经知道要用json_decode()来解码这段JSON:
$distance_data = json_decode($output);
但我尝试的写法不对,比如:
$duration_value = $distance_data['rows']['elements']['duration']['value'];
想请教一下正确的提取方式是什么?
嗨,你之所以出错,核心是没注意到JSON里的rows和elements都是数组结构(用[]包裹的部分),必须先通过索引访问它们的元素才行。另外还要注意json_decode()的参数差异,两种访问方式我都给你列出来:
方式1:对象方式访问(默认行为)
json_decode()默认会返回对象,需要用->来访问属性,同时要加上数组索引[0]来取数组里的唯一元素:
$distance_value = $distance_data->rows[0]->elements[0]->distance->value; $duration_value = $distance_data->rows[0]->elements[0]->duration->value;
方式2:关联数组方式访问(传第二个参数true)
如果习惯用数组的键值对访问,可以给json_decode()传第二个参数true,让它返回关联数组,同样要加上数组索引:
// 传入true,返回关联数组 $distance_data = json_decode($output, true); $distance_value = $distance_data['rows'][0]['elements'][0]['distance']['value']; $duration_value = $distance_data['rows'][0]['elements'][0]['duration']['value'];
为什么要加[0]?因为rows和elements都是只包含单个元素的数组,所以取索引0就能拿到我们需要的内容啦。你可以测试这两种写法,应该就能正确提取到目标数值了~
内容的提问来源于stack exchange,提问作者jonmrich
相关产品推荐
相关产品推荐

