JSON (Java Script Object Notation) is fast becoming the most common data format for asynchronous browser-server communication. Standard functions are available in PHP for generating, parsing and interpreting JSON format. The PHP program in this how-to guide reads a JSON file into a JSON string and uses json_decode() function to convert the JSON string into a PHP variable. JSON data consists of nested key-value pairs.
Consider a JSON file students.json
containing student names, age and address as below.
[ { "name":"Adam", "Age":18, "Address": { "Street":"1000 Brooklyn Meadow", "City":"Denver" } }, { "name":"Bob", "Age":30, "Address": { "Street":"23 Sharp Crescent", "City":"Bristol"} }, { "name":"Kaneko", "Age":27, "Address":{"Street":"7 Yuki Street","City":"Tokyo"} } ]
The following PHP program calls the file_get_contents() to read JSON from student_data.json file and parse this JSON file into a nested array using json_decode()
function.
<?php // Read JSON file $json = file_get_contents('./student_data.json'); //Decode JSON $json_data = json_decode($json,true); //Print data print_r($json_data); ?>
Output will be similar to:
Array ( [0] => Array ( [name] => Adam [Age] => 18 [Address] => Array ( [Street] => 1000 Brooklyn Meadow [City] => Denver ) ) [1] => Array ( [name] => Bob [Age] => 30 [Address] => Array ( [Street] => 23 Sharp Crescent [City] => Bristol ) ) [2] => Array ( [name] => Kaneko [Age] => 27 [Address] => Array ( [Street] => 7 Yuki Street [City] => Tokyo ) ) )
The json_decode() converts the JSON data to a nested array. The first argument of json_decode
function is the string to decode. The second argument can be set to either true
or false
. If set to true, json_decode will return an associative array which has string indexes instead of numeric indexes.
THe json_decode
function return NULL if the JSON string cannot be decoded. In which case you can call the json_last_error_msg() function to check the error message.
You can traverse a JSON object using foreach
loops, using recursion or using iterators.
The following code sample prints out the students whose age is less than 20.
<?php // Read JSON file $json = file_get_contents('./student_data.json'); //Decode JSON $json_data = json_decode($json,true); //Traverse array and get the data for students aged less than 20 foreach ($json_data as $key1 => $value1) { if($json_data[$key1]["Age"] < 20){ print_r($json_data[$key1]); } } ?>
For more details on getting data from JSON objects, read Getting data from a nested JSON in PHP using Recursion and Loops