JSON_decode 问题 返回带有数据的字符串() 和 int()


JSON_decode issue Returns string() and int() with data

我正在从谷歌地图中提取一些JSON数据,这些数据给了我两个地址之间的精确距离。这工作正常,但是当涉及到使用json_decode时,它给了我一些可怕的数据!这是输出的示例数组:

array(4) {
  ["destination_addresses"]=>
  array(1) {
    [0]=>
    string(51) "96 Stirling Street, Alva, Clackmannanshire FK12, UK"
  }
  ["origin_addresses"]=>
  array(1) {
    [0]=>
    string(64) "17 Dalgety Road, Edinburgh, Edinburgh, City of Edinburgh EH7, UK"
  }
  ["rows"]=>
  array(1) {
    [0]=>
    array(1) {
      ["elements"]=>
      array(1) {
        [0]=>
        array(3) {
          ["distance"]=>
          array(2) {
            ["text"]=>
            string(7) "39.3 mi"
            ["value"]=>
            int(63242)
          }
          ["duration"]=>
          array(2) {
            ["text"]=>
            string(7) "59 mins"
            ["value"]=>
            int(3555)
          }
          ["status"]=>
          string(2) "OK"
        }
      }
    }
  }
  ["status"]=>
  string(2) "OK"
}

如您所见,它还将字符串(#)或int(#)放在数组项的开头,并在值周围放置"导致此问题的原因是什么?下面是输出的 JSON。

{
   "destination_addresses" : [ "96 Stirling Street, Alva, Clackmannanshire FK12, UK" ],
   "origin_addresses" : [ "17 Dalgety Road, Edinburgh, Edinburgh, City of Edinburgh EH7, UK" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "39.3 mi",
                  "value" : 63242
               },
               "duration" : {
                  "text" : "59 mins",
                  "value" : 3555
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

我的 php 代码:

$url = fopen("https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$latitudeFrom.",".$longitudeFrom."&destinations=".$latitudeTo.",".$longitudeTo."&mode=driving&units=imperial", "r");
        $result = json_decode(stream_get_contents($url), true);
        fclose($url);
        var_dump($result['rows'][0]['elements'][0]['distance']['text']);

你得到的是一个对象,而不是一个数组。您需要这样引用它。处理数据时,从var_dump中看到的数据将不会显示在输出中。这只是出于调试目的,以便您可以看到正在处理的内容。

返回对象的json_decode

$json = json_decode($json);
echo $json->rows[0]->elements[0]->distance->text;

返回数组的json_decode

$json = json_decode($json, true);
echo $json['rows'][0]['elements'][0]['distance']['text'];