How to Use JSON Data with PHP or JavaScript
- By Preneesh AV --
- 20-Sep-2018 --
- 72 Comments
Learn what a JSON feed is, and how to extract its data with PHP, JavaScript, or jQuery.
JSON is used to transmit data between a server and a browser. Here is a basic example of what might be in a .json string.
, "title": "Web Developer", "website": "https://www.taniarascia.com"}As you can see, it’s a human readable format of data that might traditionally be stored in a table. Some companies might have public .json files located that you can access and extract data from (an API you can connect to). You might also save a .json file somewhere in your project that you want to extract data from.
Goals
JSON data can be accessed and utilized with many programming languages. In this tutorial, we’ll learn how to access JSON with PHP and JavaScript.
Prerequisites
- You must either have a local server set up, or a host that runs PHP and some basic PHP knowledge.
- Basic knowledge of programming concepts (arrays and variables) and using JavaScript.
What is JSON?
JSON stands for JavaScript Object Notation. It is data saved in a .json file, and consists of a series of key/value pairs.
{ "key": "value" }The value of any JSON key can be a string, Boolean, number, null, array, or object. Comments are not allowed in JSON.
Although JSON resembles an object or an array, JSON is a string. A serialized string, which means it can later be parsed and decoded into data types.
Using data from JSON with PHP
First, to drill in that JSON is simply a string, we’re going to write JSON into a PHP string and apply it to a variable called $data.
$data = '{"name": "Aragorn","race": "Human"}';Then we’ll use the json_decode() function to convert the JSON string into a PHP object.
$character = json_decode($data);Now we can access it as a PHP object.
echo $character->name;Here’s the whole file.
<?php$data = '{"name": "Aragorn","race": "Human"}';$character = json_decode($data);echo $character->name;Here is the output.
Accessing a JSON feed from a URL
From here out, we’ll put all JSON data into its own .json file. This way, we can retrieve the contents of the file instead of keeping it as a PHP string.
Here’s what data.json will look like.
[{"name": "Aragorn","race": "Human"},{"name": "Legolas","race": "Elf"},{"name": "Gimli","race": "Dwarf"}]And here’s how we’ll extract that data in PHP.
$url = 'data.json'; // path to your JSON file$data = file_get_contents($url); // put the contents of the file into a variable$characters = json_decode($data); // decode the JSON feedIn order to get one entry, we’ll have to access the appropriate array number. Remember, counting begins with 0 in programming.
echo $characters[0]->name;I can access all the data in the array with a foreach loop.
Getting data from nested arrays
So far, we’ve only used JSON feeds with key/value pairs, but it’s common to encounter nesting. Here’s another nerdy example, which we can save in a new file called wizards.json.
[{"name": "Harry Potter","wand": [{"core": "phoenix feather","length": "11 inches","wood": "holly"}]},{"name": "Hermione Granger","wand": [{"core": "dragon heartstring","length": "10 and 3/4 inches","wood": "vine"}]}]Decoding the feed.
$url = 'wizards.json'; $data = file_get_contents($url); $wizards = json_decode($data, true);We’ll be able to access the nested array using $wizard['key'][0]['key'] in a loop, or whatever number corresponds correctly if you only want to print one.
foreach ($wizards as $wizard) {echo $wizard['name'] . '\'s wand is ' . $wizard['wand'][0]['wood'] . ', ' . $wizard['wand'][0]['length'] . ', with a ' . $wizard['wand'][0]['core'] . ' core. <br>' ;}Converting a PHP object or array into JSON
Just as you use
json_decode()to turn JSON into PHP, you can turn PHP into JSON withjson_encode().$data = ['name' => 'Aragorn','race' => 'Human'];echo json_encode($data);We made a PHP array and encoded it. Here’s the output:
Using data from JSON with JavaScript
We’re going to create a JavaScript variable called
dataand apply the JSON string.var data = '[ { "name": "Aragorn", "race": "Human" }, { "name": "Gimli", "race": "Dwarf" } ]';Now we’ll use JavaScript built in
JSON.parse()function to decode the string.data = JSON.parse(data);From here we can access the data like a regular JavaScript object.
console.log(data[1].name);And we can loop through each iteration with a
forloop.for (var i = 0; i < data.length; i++) {console.log(data[i].name + ' is a ' + data[i].race + '.');}That was easy! Now, we’ll probably need to access JSON from a URL. There’s an extra step involved, where we have to make a request to the file. Let’s just take the above JSON string and put it in data.json.
[{"name": "Aragorn","race": "Human"},{"name": "Gimli","race": "Dwarf"}]Now we’ll make an
XMLHttpRequest().var request = new XMLHttpRequest();We’ll open the file (data.json) via GET (URL) request.
request.open('GET', 'data.json', true);From here, we’ll parse and work with all our JSON data within the
onloadfunction.request.onload = function () {// begin accessing JSON data here}Then finally, submit the request.
request.send();Here’s the final code.
var request = new XMLHttpRequest();request.open('GET', 'data.json', true);request.onload = function () {// begin accessing JSON data herevar data = JSON.parse(this.response);for (var i = 0; i < data.length; i++) {console.log(data[i].name + ' is a ' + data[i].race + '.');}}request.send();And the output.
