How can I parse a JSON file with PHP? [duplicate]
To iterate over a multidimensional array, you can use RecursiveArrayIterator
$jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST);foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; }}
Output:
John:status => WaitJennifer:status => ActiveJames:status => Activeage => 56count => 10progress => 0.0029857bad => 0
I can't believe so many people are posting answers without reading the JSON properly.
If you foreach iterate $json_a
alone, you have an object of objects. Even if you pass in true
as the second parameter, you have a two-dimensional array. If you're looping through the first dimension you can't just echo the second dimension like that. So this is wrong:
foreach ($json_a as $k => $v) { echo $k, ' : ', $v;}
To echo the statuses of each person, try this:
<?php$string = file_get_contents("/home/michael/test.json");if ($string === false) { // deal with error...}$json_a = json_decode($string, true);if ($json_a === null) { // deal with error...}foreach ($json_a as $person_name => $person_a) { echo $person_a['status'];}?>
The most elegant solution:
$shipments = json_decode(file_get_contents("shipments.js"), true);print_r($shipments);
Remember that the json-file has to be encoded in UTF-8 without BOM. If the file has BOM, then json_decode will return NULL.
Alternatively:
$shipments = json_encode(json_decode(file_get_contents("shipments.js"), true));echo $shipments;