json_decode to array
As per the documentation, you need to specify true
as the second argument if you want an associative array instead of an object from json_decode
. This would be the code:
$result = json_decode($jsondata, true);
If you want integer
keys instead of whatever the property names are:
$result = array_values(json_decode($jsondata, true));
However, with your current decode you just access it as an object:
print_r($obj->Result);
How to access JSON decoded array in PHP
As you're passing true
as the second parameter to json_decode
, in the above example you can retrieve data doing something similar to:
$myArray = json_decode($data, true);
echo $myArray[0]['id']; // Fetches the first ID
echo $myArray[0]['c_name']; // Fetches the first c_name
// ...
echo $myArray[2]['id']; // Fetches the third ID
// etc..
If you do NOT pass true
as the second parameter to json_decode
it would instead return it as an object:
echo $myArray[0]->id;
How to extract and access data from JSON with PHP?
Intro
First off you have a string. 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()
.
$data = json_decode($json);
Therein you might find:
- scalars: strings, ints, floats, and bools
- nulls (a special type of its own)
- compound types: objects and arrays.
These are the things that can be encoded in JSON. Or more accurately, these are PHP's versions of the things that can be encoded in JSON.
There's nothing special about them. They are not "JSON objects" or "JSON arrays." You've decoded the JSON - you now have basic everyday PHP types.
Objects will be instances of stdClass, a built-in class which is just a generic thing that's not important here.
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
.
$json = '
{
"type": "donut",
"name": "Cake"
}';
$yummy = json_decode($json);
echo $yummy->type; //donut
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]
.
$json = '
[
"Glazed",
"Chocolate with Sprinkles",
"Maple"
]';
$toppings = json_decode($json);
echo $toppings[1]; //Chocolate with Sprinkles
Iterate over it with foreach
.
foreach ($toppings as $topping) {
echo $topping, "\n";
}
Glazed
Chocolate with Sprinkles
Maple
Or mess about with any of the bazillion built-in array functions.
Accessing nested items
The properties of objects and the elements of arrays might be more objects and/or arrays - you can simply continue to access their properties and members as usual, e.g. $object->array[0]->etc
.
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json);
echo $yummy->toppings[2]->id; //5004
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']
.
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json, true);
echo $yummy['toppings'][2]['type']; //Maple
Accessing associative array items
When decoding a JSON object to an associative PHP array, you can iterate both keys and values using the foreach (array_expression as $key => $value)
syntax, eg
$json = '
{
"foo": "foo value",
"bar": "bar value",
"baz": "baz value"
}';
$assoc = json_decode($json, true);
foreach ($assoc as $key => $value) {
echo "The value of key '$key' is '$value'", PHP_EOL;
}
Prints
The value of key 'foo' is 'foo value'
The value of key 'bar' is 'bar value'
The value of key 'baz' is 'baz value'
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()
:
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}';
$yummy = json_decode($json);
print_r($yummy);
and check the output:
stdClass Object
(
[type] => donut
[name] => Cake
[toppings] => Array
(
[0] => stdClass Object
(
[id] => 5002
[type] => Glazed
)
[1] => stdClass Object
(
[id] => 5006
[type] => Chocolate with Sprinkles
)
[2] => stdClass Object
(
[id] => 5004
[type] => Maple
)
)
)
It'll tell you where you have objects, where you have arrays, along with the names and values of their members.
If you can only get so far into it before you get lost - go that far and hit that with print_r()
:
print_r($yummy->toppings[0]);
stdClass Object
(
[id] => 5002
[type] => Glazed
)
Take a look at it in this handy interactive JSON explorer.
Break the problem down into pieces that are easier to wrap your head around.
json_decode()
returns null
This happens because either:
- The JSON consists entirely of just that,
null
. - The JSON is invalid - check the result of
json_last_error_msg
or put it through something like JSONLint. - It contains elements nested more than 512 levels deep. This default max depth can be overridden by passing an integer as the third argument to
json_decode()
.
If you need to change the max depth you're probably solving the wrong problem. Find out why you're getting such deeply nested data (e.g. the service you're querying that's generating the JSON has a bug) and get that to not happen.
Object property name contains a special character
Sometimes you'll have an object property name that contains something like a hyphen -
or at sign @
which can't be used in a literal identifier. Instead you can use a string literal within curly braces to address it.
$json = '{"@attributes":{"answer":42}}';
$thing = json_decode($json);
echo $thing->{'@attributes'}->answer; //42
If you have an integer as property see: How to access object properties with names like integers? as reference.
Someone put JSON in your JSON
It's ridiculous but it happens - there's JSON encoded as a string within your JSON. Decode, access the string as usual, decode that, and eventually get to what you need.
$json = '
{
"type": "donut",
"name": "Cake",
"toppings": "[{ \"type\": \"Glazed\" }, { \"type\": \"Maple\" }]"
}';
$yummy = json_decode($json);
$toppings = json_decode($yummy->toppings);
echo $toppings[0]->type; //Glazed
Data doesn't fit in memory
If your JSON is too large for json_decode()
to handle at once things start to get tricky. See:
- Processing large JSON files in PHP
- How to properly iterate through a big json file
How to sort it
See: Reference: all basic ways to sort arrays and data in PHP.
How to get json decode array value using PHP
json_decode parameter 2 is assoc
When TRUE, returned objects will be converted into associative arrays.
default is false
reference http://php.net/manual/en/function.json-decode.php
json_decode($response, true);
How to get values of decoded JSON data in PHP
For example, if you want to print the senderid :
<?php
$var = '{"senderDetails":[{"status":"failed","senderid":"0","message":"Kindly upgrade your account to use this service."}]}';
$decoded = json_decode($var);
var_dump($decoded);
echo($decoded->senderDetails[0]->senderid);
?>
It's important to use var_dump() on those kind of variables to understand how to access them properly.
get a value from json decoded array
You've got json-in-json, which means that the value for allresponses
is itself a json string, and has to be decoded separately:
$return = '{"allresponses":"{\"id\":\"123456\",\"recipients\":1}"}';
$temp = json_decode($return);
$allresp = $temp['allresponses'];
$temp2 = json_decode($allresp);
echo $temp2['id']; // 123456
Note that your $getid[0]
is WRONG. You don't have an array. The json is purely objects ({...}
), therefore there's no [0]
index to access. Even some basic debugging like var_dump($getid)
would have shown you this.
access object array in php from json decode
In your loop your handle your item as object. var_dump($user[0]->ongoing); but you pass to the decode function the second parameter true. Then you return an array. Afterwards you have access like that: $user[0]['ongoing']
or you pass to the loop directly the items. See second example. Thank @IMSoP for the right hint!
Update
The problem is that you have item, count and ScannedCount as key. But only item has the property ongoing
. You need a condition to check if the key ongoing
exists. Then it works.
version 1 (with key check)
$str = '{"Items":[{"date":"4/12/2022","ongoing":"1","id":"1"}],"Count":1,"ScannedCount":1}';
$user_data = json_decode($str, true);
if (! empty($user_data)) {
foreach($user_data as $key => $value) {
if ($key === 'Items') {
print_r($value[0]['ongoing']);
}
}
}
Version 2 (pass items directly to loop)
$str = '{"Items":[{"date":"4/12/2022","ongoing":"1","id":"1"}],"Count":1,"ScannedCount":1}';
$user_data = json_decode($str, true);
if (! empty($user_data)) {
foreach ($user_data['items'] as $value) {
print_r($value[0]['ongoing']);
}
}
Adressing PHP array decoded from JSON
This is because json_decode()
with no parameters attempts to convert your json string to an stdClass object. If you want to convert it to an array, you need to set the 2nd parameters (the $assoc
boolean) to true
:
$json = file_get_contents('LINK TO JSON OUTPUT');
$array = json_decode($json, true);
Related Topics
Codeigniter Sessions Not Working After Migration
Convert Number to Letter with PHP
How to Solve Error 404 When Deploying Laravel Project to Cpanel
PHP Password_Verify() Hash and Pass Won't Match
How to Escape Single-Quote (Apostrophe) in String Using PHP
Rest API Authorization & Authentication (Web + Mobile)
How to Dynamically Populate Options on Dropdown Lists Based on Selection in Another Dropdown
How to Use Prepare() with Dynamic Column Names
PHP String Manipulation: Extract Hrefs
PHP Integer and Float Comparison Mismatch
Mysqli_Stmt::Execute() Expects Exactly 0 Parameters, 1 Given
What Is Null Coalescing Assignment = Operator in PHP 7.4
How to Set 777 Permission on a Particular Folder
PHP Function That Creates a Nested Ul Li