Today, In this blog we are going to learn “How to decode JSON data and accessing the results in PHP”.
JSON is not an array, an object, or a data structure. JSON is a text-based serialization format – so a fancy string, but still just a string. Decode it in PHP by using json_decode()
.
[pastacode manual=”%24data%20%3D%20json_decode(%24json)%3B” provider=”manual” lang=”default”/]
Suppose we have this JSON File.
[pastacode manual=”%7B%0D%0A%20%20%20%20%22type%22%3A%20%22foo%22%2C%0D%0A%20%20%20%20%22name%22%3A%20%22bar%22%2C%0D%0A%20%20%20%20%22property%22%3A%20%5B%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22502%22%2C%20%22type%22%3A%20%22property1%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22504%22%2C%20%22type%22%3A%20%22property2%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22506%22%2C%20%22type%22%3A%20%22property3%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22508%22%2C%20%22type%22%3A%20%22property4%22%20%7D%0D%0A%20%20%20%20%5D%0D%0A%7D” provider=”manual” lang=”default”/]
How do we decode this JSON data in PHP and access the resulting data?
Accessing object properties
You access the properties of one of these objects the same way you would for the public non-static properties of any other object, e.g. $object->property
.
[pastacode manual=”%24json_data%20%3D%20’%20%0D%0A%7B%20%0D%0A%20%20%20%20%22type%22%3A%20%22foo%22%2C%20%0D%0A%20%20%20%20%22name%22%3A%20%22bar%22%20%0D%0A%7D’%3B%20%0D%0A%0D%0A%24data%3D%20json_decode(%24json_data)%3B%20%0D%0A%0D%0Aecho%20%24data-%3Etype%3B%20%2F%2Ffoo%0D%0Aecho%20%24data-%3Ename%3B%20%2F%2Fbar” provider=”manual” lang=”default”/]
Accessing array elements
You access the elements of one of these arrays the same way you would for any other array, e.g. $array[0]
.
[pastacode manual=”%24json_data%20%3D%20’%20%0D%0A%5B%20%0D%0A%22property1%22%2C%20%0D%0A%22property2%22%2C%20%0D%0A%22property3%22%2C%0D%0A%22property4%22%20%0D%0A%5D’%3B%0D%0A%0D%0A%20%24data%3D%20json_decode(%24json_data%20)%3B%20%0D%0A%0D%0Aecho%20%24data%5B0%5D%3B%20%2F%2Fproperty1%0D%0Aecho%20%24data%5B1%5D%3B%20%2F%2Fproperty2%0D%0Aecho%20%24data%5B2%5D%3B%20%2F%2Fproperty3%0D%0Aecho%20%24data%5B3%5D%3B%20%2F%2Fproperty4″ provider=”manual” lang=”default”/]
Iterate it with foreach loop
.
[pastacode manual=”foreach%20(%24property%20as%20%24propertys)%20%0D%0A%7B%20%0D%0Aecho%20%24propertys%2C%20%22%5Cn%22%3B%20%0D%0A%7D%0D%0A%0D%0AOutput%3A%0D%0Aproperty1%0D%0Aproperty2%0D%0Aproperty3%0D%0Aproperty4%0D%0A” provider=”manual” lang=”default”/]
You May Also Like:
- Limit number of login attempt using PHP & MySQL
- Take Image Snapshot from a webcam with Jquery and HTML
- PHP include() Vs require()
- Is PHP in 2019 still a relevant language
Passing true
as the second argument to json_decode()
When you do this, instead of objects you’ll get associative arrays – arrays with strings for keys. Again you access the elements thereof as usual, e.g. $array[‘key’].
[pastacode manual=”%24json_data%20%3D%20’%20%7B%0D%0A%20%20%20%20%22type%22%3A%20%22foo%22%2C%0D%0A%20%20%20%20%22name%22%3A%20%22bar%22%2C%0D%0A%20%20%20%20%22property%22%3A%20%5B%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22502%22%2C%20%22type%22%3A%20%22property1%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22504%22%2C%20%22type%22%3A%20%22property2%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22506%22%2C%20%22type%22%3A%20%22property3%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22508%22%2C%20%22type%22%3A%20%22property4%22%20%7D%0D%0A%20%20%20%20%5D%0D%0A%7D’%3B%20%0D%0A%0D%0A%24data%3D%20json_decode(%24json_data%20%2C%20true)%3B%20%0D%0Aecho%20%24data%5B’property’%5D%5B2%5D%5B’type’%5D%3B%20%2F%2Fproperty3%0D%0A” provider=”manual” lang=”default”/]
Don’t know how the data is structured
Read the documentation for whatever it is you’re getting the JSON from.
Look at the JSON – where you see curly brackets {}
expect an object, where you see square brackets []
expect an array.
Hit the decoded data with a print_r()
:
[pastacode manual=”%3Ccode%3E%3Cspan%20class%3D%22pln%22%3E%24json%20%3C%2Fspan%3E%3Cspan%20class%3D%22pun%22%3E%3D%3C%2Fspan%3E%20%3Cspan%20class%3D%22str%22%3E’%0D%0A%7B%0D%0A%20%20%20%20%22type%22%3A%20%22donut%22%2C%0D%0A%20%20%20%20%22name%22%3A%20%22Cake%22%2C%0D%0A%20%20%20%20%22toppings%22%3A%20%5B%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%225002%22%2C%20%22type%22%3A%20%22Glazed%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%225006%22%2C%20%22type%22%3A%20%22Chocolate%20with%20Sprinkles%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%225004%22%2C%20%22type%22%3A%20%22Maple%22%20%7D%0D%0A%20%20%20%20%5D%0D%0A%7D’%3C%2Fspan%3E%3Cspan%20class%3D%22pun%22%3E%3B%3C%2Fspan%3E%3C%2Fcode%3E” provider=”manual” lang=”php”/]
[pastacode manual=”%24json_data%20%3D%20’%7B%0D%0A%20%20%20%20%22type%22%3A%20%22foo%22%2C%0D%0A%20%20%20%20%22name%22%3A%20%22bar%22%2C%0D%0A%20%20%20%20%22property%22%3A%20%5B%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22502%22%2C%20%22type%22%3A%20%22property1%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22504%22%2C%20%22type%22%3A%20%22property2%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22506%22%2C%20%22type%22%3A%20%22property3%22%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%7B%20%22id%22%3A%20%22508%22%2C%20%22type%22%3A%20%22property4%22%20%7D%0D%0A%20%20%20%20%5D%0D%0A%7D’%3B%0D%0A%0D%0A%24data%3D%20json_decode(%24json_data%20)%3B%20%0D%0Aprint_r(%24data)%3B” provider=”manual” lang=”default”/]
and check the output:
[pastacode manual=”stdClass%20Object%20%0D%0A(%20%0D%0A%20%20%20%20%5Btype%5D%20%3D%3E%20foo%0D%0A%20%20%20%20%5Bname%5D%20%3D%3E%20bar%20%0D%0A%20%20%20%20%5Bproperty%5D%20%3D%3E%20Array%20%0D%0A%20%20%20%20%20%20%20%20%20%20(%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%5B0%5D%20%3D%3E%20stdClass%20Object%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bid%5D%20%3D%3E%20502%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Btype%5D%20%3D%3E%20property1%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%5B1%5D%20%3D%3E%20stdClass%20Object%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bid%5D%20%3D%3E%20504%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Btype%5D%20%3D%3E%20property2%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%5B2%5D%20%3D%3E%20stdClass%20Object%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bid%5D%20%3D%3E%20506%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Btype%5D%20%3D%3E%20property3%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%5B3%5D%20%3D%3E%20stdClass%20Object%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bid%5D%20%3D%3E%20508%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Btype%5D%20%3D%3E%20property4%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20%0D%0A%20%20%20%20%20%20%20%20%20%20)%20%0D%0A)” provider=”manual” lang=”default”/]
It’ll tell you where you have objects, where you have arrays, along with the names and values of their members.
Few Points to remember:
json_decode
requires the string to be a validjson
else it will returnNULL
.- In the event of a failure to decode,
json_last_error()
can be used to determine the exact nature of the error. - Make sure you pass in
utf8
content, orjson_decode
may error out and just return aNULL
value.