Loading... In this tutorial you will learn how to encode and decode JSON data in PHP. ## What is JSON JSON stands for JavaScript Object Notation. JSON is a standard lightweight data-interchange format which is quick and easy to parse and generate. JSON, like XML, is a text-based format that’s easy to write and easy to understand for both humans and computers, but unlike XML, JSON data structures occupy less bandwidth than their XML versions. JSON is based on two basic structures: * Object: 它被定义为键/值对(即键值对)的集合。“键:值”)。每个对象都以左花括号 { 开始,以右花括号 } 结束。多个键值对由逗号“,”分隔。 * Array: 它被定义为值的有序列表。数组以左方括号 [ 开始,右方括号 ] 结束。值由逗号 , 分隔。 In JSON, keys are always strings, while the value can be a string, number, true or false, null or even an object or an array. Strings must be enclosed in double quotes " and can contain escape characters such as \\n, \\t and \\. A JSON object may look like this: ```php { "book": { "name": "Harry Potter and the Goblet of Fire", "author": "J. K. Rowling", "year": 2000, "genre": "Fantasy Fiction", "bestseller": true } } ``` Whereas an example of JSON array would look something like this: ```php { "fruits": [ "Apple", "Banana", "Strawberry", "Mango" ] } ``` > Tip: A data-interchange format is a text format which is used to interchange or exchange data between different platforms and operating systems. JSON is the most popular and lightweight data-interchange format for web applications. ## Parsing JSON with PHP JSON data structures are very similar to PHP arrays. PHP has built-in functions to encode and decode JSON data. These functions are json\_encode() and json\_decode(), respectively. Both functions only works with UTF-8 encoded string data. ## Encoding JSON Data in PHP In PHP the json\_encode() function is used to encode a value to JSON format. The value being encoded can be any [PHP data type](http://www.bixiaguangnian.com/manual/php7/3969.html "PHP data type") except a resource, like a database or file handle. The below example demonstrates how to encode a [PHP associative array](http://www.bixiaguangnian.com/manual/php7/3974.html "PHP associative array") into a JSON object: ```php <?php // An associative array $marks = array("Peter"=>65, "Harry"=>80, "John"=>78, "Clark"=>90); echo json_encode($marks); ?> ``` The output of the above example will look like this: ```php {"Peter":65,"Harry":80,"John":78,"Clark":90} ``` Similarly, you can encode the PHP indexed array into a JSON array, like this: ```php <?php // An indexed array $colors = array("Red", "Green", "Blue", "Orange", "Yellow"); echo json_encode($colors); ?> ``` The output of the above example will look like this: ```php ["Red","Green","Blue","Orange","Yellow"] ``` You can also force json\_encode() function to return an [PHP indexed array](http://www.bixiaguangnian.com/manual/php7/3974.html "PHP indexed array") as JSON object by using the JSON\_FORCE\_OBJECT option, as shown in the example below: ```php <?php // An indexed array $colors = array("Red", "Green", "Blue", "Orange"); echo json_encode($colors, JSON_FORCE_OBJECT); ?> ``` The output of the above example will look like this: ```php {"0":"Red","1":"Green","2":"Blue","3":"Orange"} ``` As you can see in the above examples a non-associative array can be encoded as array or object. However, an associative array always encoded as object. ## Decoding JSON Data in PHP Decoding JSON data is as simple as encoding it. You can use the PHP json\_decode() function to convert the JSON encoded string into appropriate PHP data type. The following example demonstrates how to decode or convert a JSON object to [PHP object](http://www.bixiaguangnian.com/manual/php7/3994.html "PHP object"). ```php <?php // Store JSON data in a PHP variable $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; var_dump(json_decode($json)); ?> ``` The output of the above example will look something like this: ```php object(stdClass)#1 (4) { ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) } ``` By default the json\_decode() function returns an object. However, you can optionally specify a second parameter \$assoc which accepts a boolean value that when set as true JSON objects are decoded into associative arrays. It is false by default. Here’s an example: ```php <?php // Store JSON data in a PHP variable $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; var_dump(json_decode($json, true)); ``` The output of the above example will look something like this: ```php array(4) { ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) } ``` Now let’s check out an example that will show you how to decode the JSON data and access individual elements of the JSON object or array in PHP. ```php <?php // Assign JSON encoded string to a PHP variable $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; // Decode JSON data to PHP associative array $arr = json_decode($json, true); // Access values from the associative array echo $arr["Peter"]; // Output: 65 echo $arr["Harry"]; // Output: 80 echo $arr["John"]; // Output: 78 echo $arr["Clark"]; // Output: 90 // Decode JSON data to PHP object $obj = json_decode($json); // Access values from the returned object echo $obj->Peter; // Output: 65 echo $obj->Harry; // Output: 80 echo $obj->John; // Output: 78 echo $obj->Clark; // Output: 90 ?> ``` You can also loop through the decoded data using [foreach()](http://www.bixiaguangnian.com/manual/php7/3976.html#h2-php-foreach-loop "foreach()") loop, like this: ```php <?php // Assign JSON encoded string to a PHP variable $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; // Decode JSON data to PHP associative array $arr = json_decode($json, true); // Loop through the associative array foreach($arr as $key=>$value){ echo $key . "=>" . $value . "<br>"; } echo "<hr>"; // Decode JSON data to PHP object $obj = json_decode($json); // Loop through the object foreach($obj as $key=>$value){ echo $key . "=>" . $value . "<br>"; } ?> ``` ## Extracting Values from Nested JSON Data in PHP JSON 对象和数组也可以嵌套。JSON 对象可以任意包含其他 JSON 对象、数组、嵌套数组、JSON 对象数组等。下面的示例将向您展示如何解码嵌套的 JSON 对象并在 PHP 中打印其所有值。 ```php <?php // Define recursive function to extract nested values function printValues($arr) { global $count; global $values; // Check input is an array if(!is_array($arr)){ die("ERROR: Input is not an array"); } /* Loop through array, if value is itself an array recursively call the function else add the value found to the output items array, and increment counter by 1 for each value found */ foreach($arr as $key=>$value){ if(is_array($value)){ printValues($value); } else{ $values[] = $value; $count++; } } // Return total count and values found in array return array('total' => $count, 'values' => $values); } // Assign JSON encoded string to a PHP variable $json = '{ "book": { "name": "Harry Potter and the Goblet of Fire", "author": "J. K. Rowling", "year": 2000, "characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"], "genre": "Fantasy Fiction", "price": { "paperback": "$10.40", "hardcover": "$20.32", "kindle": "4.11" } } }'; // Decode JSON data into PHP associative array format $arr = json_decode($json, true); // Call the function and print all the values $result = printValues($arr); echo "<h3>" . $result["total"] . " value(s) found: </h3>"; echo implode("<br>", $result["values"]); echo "<hr>"; // Print a single value echo $arr["book"]["author"] . "<br>"; // Output: J. K. Rowling echo $arr["book"]["characters"][0] . "<br>"; // Output: Harry Potter echo $arr["book"]["price"]["hardcover"]; // Output: $20.32 ?> ``` Last modification:September 12, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏