Question

I am attempting to write PHP code to interact with JSON output from Mapquest's Open API / Open Street Map service. I have listed it below. I have been using this code in my Drupal 6 implementation. This code returns no output. When I use it, json_last_error() outputs 0.

function json_test_page() {
  $url = 'http://open.mapquestapi.com/directions/v1/route?outFormat=json&from=40.037661,-76.305977&to=39.962532,-76.728099';
  $json = file_get_contents($url);
  $obj = json_decode(var_export($json));
  $foo .= $obj->{'fuelUsed'}; 
  $output .= foo;
  return $output;
}

You can view the raw JSON output by following the URL. In this function I am expecting to get 1.257899 as my output. I have two questions:

(1) What can I call so I get items out of my array. For instance, how can I get the value represented in JSON "distance":26.923 out of the array?

(2) Is it possible am I running into a recursion limit issue that I've read about in the PHP Manual?

Was it helpful?

Solution

If you read the manual page for json_decode carefully, you'll notice there is a parameter (false by default) that you can pass to have it return an array rather than an object.

$obj = json_decode($json, true);

So:

<?php

function json_test_page() {
    $url = 'http://open.mapquestapi.com/directions/v1/route?outFormat=json&from=40.037661,-76.305977&to=39.962532,-76.728099';
    $json = file_get_contents($url);
    $obj = json_decode($json, true);
    //var_dump($obj);
    echo $obj['route']['fuelUsed'];
}

json_test_page();

OTHER TIPS

Remove the var_export function from json_decode.

You're trying to convert information about a string to json.

I was able to get the fuelUsed property this way

function json_test_page() {
    $url = 'http://open.mapquestapi.com/directions/v1/route?outFormat=json&from=40.037661,-76.305977&to=39.962532,-76.728099';
    $json = file_get_contents($url);
    $obj = json_decode($json);
    return $obj->route->fuelUsed;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top