Reading Json object with inside array - php

This is my JSON result:
{
"#odata.context": "http://wabi-west-europe-redirect.analysis.windows.net/v1.0/collections/washington/workspaces/37380bc1-dd47-4c95-8dbd-5efecafc8b26/$metadata#reports",
"value": [
{
"id": "6ea77895-f92a-4ca6-90f7-cdade3683cd6",
"modelId": 0,
"name": "america",
"webUrl": "https://app.powerbi.com/reports/6ea77895-f92a-4ca6-90f7-cdade3683cd6",
"embedUrl": "https://embedded.powerbi.com/appTokenReportEmbed?reportId=6ea77895-f92a-4ca6-90f7-cdade3683cd6",
"isOwnedByMe": true,
"isOriginalPbixReport": false,
"datasetId": "3f1f480c-4a8c-4756-87eb-fc29f5d76de3"
},
{
"id": "ce558be6-aaf9-4bee-b344-6db7754e572b",
"modelId": 0,
"name": "dency",
"webUrl": "https://app.powerbi.com/reports/ce558be6-aaf9-4bee-b344-6db7754e572b",
"embedUrl": "https://embedded.powerbi.com/appTokenReportEmbed?reportId=ce558be6-aaf9-4bee-b344-6db7754e572b",
"isOwnedByMe": true,
"isOriginalPbixReport": false,
"datasetId": "5264cf84-214a-4c33-8f8e-f421d8ce1846"
}
]
}
In PHP im getting into
$response = json_decode($aboveresult);
But My problem is the value is in array.I want to get both the array value like id,modelId,Name,...
Please help me.
I tried $response['value'].But its showing error like Cannot use object of type stdClass as array

json_decode() accepts a second parameter, which is by default false. If you pass true, the function will return you an associative array instead of an instance of stdClass and you can work with it the way you tried before.

You have to change:
$response = json_decode($aboveresult,true);
When you mentioned the second parameter as true you will get the ASSOCIATIVE array

Try this
echo "<pre>";
$json_data = json_decode($json); //$json = your json string
print_r($json_data->value);
foreach($json_data->value as $value) {
echo 'ID: '.$value->id .'<br>';
echo 'modelId: '.$value->modelId .'<br>';
echo 'name: '.$value->name .'<br>';
}

Related

Merge two JSONs php

I have 2 different jsons and I need to get one inside the other.
JSON 1
[{
"id":"1",
"texto":"Vamos newells 17471934",
"fecha":"2019-06-24 12:09:12",
"categoria":"1",
"idpayment":"Reference_1561388952",
"provincia":"1",
"estado":"NO",
"email":"newells#gmail.com"
}]
JSON 2
{
"Texto": " VENDO O PERMUTO",
"imageJob": {
"pathConvertido": "ClasificadosPNG/0011311247.png",
"convertido": true,
"id": 5011
},
"rubroClasificado": {
"CodigoRubro": 150,
"id": 76
}
}
I need the second one inside the first one for use with javascript
I tried the array_merge() php function without getting results
since JSON1 is an array of JSON-object and JSON2 is just a JSON-object.
in addition to that you said, 'I need the second one inside the first one for use with javascript'. therefore, you can test this code https://3v4l.org/1HGNF/perf#output
please compare all performances in mem-usage and timing
$j1 = '[{
"id":"1",
"texto":"Vamos newells 17471934",
"fecha":"2019-06-24 12:09:12",
"categoria":"1",
"idpayment":"Reference_1561388952",
"provincia":"1",
"estado":"NO",
"email":"newells#gmail.com"
}]';
$j2 = '{
"Texto": " VENDO O PERMUTO",
"imageJob": {
"pathConvertido": "ClasificadosPNG/0011311247.png",
"convertido": true,
"id": 5011
},
"rubroClasificado": {
"CodigoRubro": 150,
"id": 76
}
}';
$j1 = json_decode($j1, true);
$j2 = json_decode($j2, true);
$j1[] = $j2;
var_dump(json_encode($j1));
You can use json_decode with parameter true to convert JSON into an array , then use array_merge to make them a single array
$j1 = '[{"id":"1","texto":"Vamos newells 17471934","fecha":"2019-06-24 12:09:12","categoria":"1","idpayment":"Reference_1561388952","provincia":"1","estado":"NO","email":"newells#gmail.com"}]';
$j1arr = json_decode($j1, true);
$j2 = ' {
"Texto": " VENDO O PERMUTO",
"imageJob": {
"pathConvertido": "ClasificadosPNG/0011311247.png",
"convertido": true,
"id": 5011
},
"rubroClasificado": {
"CodigoRubro": 150,
"id": 76
}
}';
$j2arr = json_decode($j2, true);
$r = array_merge($j1arr[0], $j2arr);
You can use the merged array in javascript by using json_encode
json_encode($r)
https://3v4l.org/WKX1U
Do it simply like this way without any extra array merging methods-
<?php
$json1 = json_decode('[{"id":"1","texto":"Vamos newells 17471934","fecha":"2019-06-24 12:09:12","categoria":"1","idpayment":"Reference_1561388952","provincia":"1","estado":"NO","email":"newells#gmail.com"}]',1);
$json2 = json_decode('{"Texto":" VENDO O PERMUTO","imageJob":{"pathConvertido":"ClasificadosPNG/0011311247.png","convertido":true,"id":5011},"rubroClasificado":{"CodigoRubro":150,"id":76}}',1);
$json1[] = $json2; // add second json to first json
print_r($json1);
echo json_encode($json1);
?>
WORKING DEMO: https://3v4l.org/qhsJq
As you said you want to process the resulting data in JavaScript, and as per your question you want second json inside the first json. You can do something like this.
You will get a json as final result.
$first = '[{
"id":"1",
"texto":"Vamos newells 17471934",
"fecha":"2019-06-24 12:09:12",
"categoria":"1",
"idpayment":"Reference_1561388952",
"provincia":"1",
"estado":"NO",
"email":"newells#gmail.com"
}]';
$first = str_replace(['[',']','}'], '', $first);
$second = '{
"Texto": " VENDO O PERMUTO",
"imageJob": {
"pathConvertido": "ClasificadosPNG/0011311247.png",
"convertido": true,
"id": 5011
},
"rubroClasificado": {
"CodigoRubro": 150,
"id": 76
}
}';
$second = preg_replace('/\{/', ',', $second,1);
print_r($first.$second);
As result you will get a valid json, second json inside your first json, you can validate here

Decoding JSON SubArray PHP

I have looked around on Google for quite some time now, and I'm unable to find a solution that works for me.
I have this JSON Array:
[
{
"id": 1000,
"userIdent": "ABC1000",
"username": "john.doe",
"contacts": [
{
"id": 2000,
"clientId": 1000,
"email": "john.doe#example.com",
"phone": "",
"name": "",
"isBilling": false,
"isContact": false,
"types": [
{
"id": 3000,
"name": "Home contact"
}
]
}
]
}
]
and I have this PHP code:
$json = json_decode($response, true);
foreach($json as $item) {
echo $item['id'] . "<br>";
echo $item['userIdent'] . "<br>";
echo $item['contacts']['phone'] . "<br><br>";
foreach($json->contacts as $contacts) {
echo $contacts->phone;
echo $contacts['contacts']['phone'];
}
}
I have tried:
$item['contacts']['phone'];
$contacts->phone;
$contacts['contacts']['phone'];
I can't seem to be able to full any of the data from the sub-array "contacts". Any help would be greatly appreciated!
Note:- When you use true while using json_decode() it converts all json data to array(inner or outer). So you need to treat contacts as an array not an object.
So You need to iterate over $item['contacts'] array in the second foreach()
Do like below:-
$json = json_decode($response, true);
foreach($json as $item) {
echo $item['id'] . "<br>";
echo $item['userIdent'] . "<br>";
foreach($item['contacts'] as $contacts) {//treat contacts as an array not as an object
echo $contacts['phone'];
}
}
Output:- https://eval.in/952121 (i have taken phone number for testing purpose)
You have made a mistake, on your json, the contacts property is an array, so you can't access it (either in javascript or php) as an object with $contacts->contacts['phone'].
You should do something like that : $contacts->contacts[0]['phone'] or iterate other each contacts if there may be many.
Your code should look more like this
foreach($json as $item) { // 1
echo $item['id'] . "<br>";
echo $item['userIdent'] . "<br>";
foreach($item['contacts'] as $contact) { // 2
echo $contact['phone'];
}
}
So in the first foreach you start iterating over you entire array of items (1). Inside an item is an array contacts, so you start iterating over that with a new foreach (2). Each contact can be accessed directly inside the inner foreach.
Also, on decoding you said you wanted an array as output, so you should expect that and always access it like an array (square braces). If you would have gone for an object, the $contacts->phone syntax would work, but you shouldn't mix them like you are doing.
I hope this makes sense. Feel free to ask if not.

PHP multilevel JSON decode

I try to read IME field in PHP from following JSON FORMAT:
{"komentarji": [ {"RC_KOMENTARJI": [ {
"K_ID": 101,
"STATUS": "A",
"IME": "boris",
"E_MAIL": "test#example.com",
"KOMENTAR": "testni vnos",
"IP": "10.0.0.6",
"DATUM_ZAPISA": "2016-12-03T23:23:47Z",
"DATUM_UREJANJA": "2016-12-03T23:24:01Z"
},
{
"K_ID": 1,
"STATUS": "A",
"IME": "Peter",
"KOMENTAR": "Zelo profesionalno ste opravili svoje delo.",
"IP": "10.0.0.8",
"DATUM_ZAPISA": "2011-05-04T00:00:00Z"
}
] } ] }
How can I reach that field via foreach in PHP? Thank you.
Let you decode the json to object named $result.
If you want to read first IME then try this
$result->komentarji[0]->RC_KOMENTARJI[0]->IME
If you want to read all IME then you have to apply loop throw komentarji and RC_KOMENTARJI
Decode it by using json_decode().
$object = json_decode($json);
// result in object
$array = json_decode($json, true);
// result in array
You can try this:
$array = json_decode($json, true);
foreach ($array['komentarji'] as $key => $value) {
foreach ($value['RC_KOMENTARJI'] as $k => $val) {
echo $val['IME'] . "<br/>";
}
}
This will print:
boris
Peter
Hope it helps!!!

Check a value of a key of json in PHP

I have this function in php
<?php function showTable(){
$url = "http://10.0.0.1/lib/api/desk/branch/";
$params = array ("action" => "list","company_key" => "1");
$result=requestURL($url,$params);
$json_a=json_decode(strip_tags($result),true);
?>
This is the json I got from the code above. I need to check the key "status". If it has a value "no", it should display an alert that status is not ok. Thanks!
{
"init": [
{
"status": "ok",
"record_count": 9,
"code": "",
"message": "",
"page_count": null,
"current_page": 0
}
]
}
Easy.
Suppose you hold the JSON in $json.
$jsonDecoded = json_decode($json, true);
if($jsonDecoded['init'][0]['status'] != 'ok') {
print "status is not ok :(";
}
Let say that json is in $json variable
$json = json_decode($json,true);
$status = $json['init'][0]['status'];
if($status=='ok'){
# do something here
}else{
# display not ok here
}

How to get values of a json array in php?

I have json like this:
{
"Products": [
{
"_id": 1
....
},
{
"_id": 2
....
}
]
}
And got this json :
$str = file_get_contents($_FILES["uploadFile"]["tmp_name"]);
// convert object => json
$json = json_encode($str);
// convert json => object
$decoded = json_decode($json,true);
Now i want to see all _id of Producs.
I use this echo $decoded[0]['_id']; but it shows nothing.
Any ideas?
$decoded = json_decode($json, true);
echo $decoded['products'][0]['_id'];
This decodes the json as an array that you can use just like any other array in PHP, if you have trouble accessing values, then simply do a print_r($decoded) and that should show you its structure
If you want to loop over all the ids, then simply do a foreach loop
foreach($decoded as $inner_array) {
foreach($inner_array as $products) {
echo $products['_id'];
}
}
Working demo
You should be aware of using quotes on your json string :)
keys and values .
You don't need to encode it. the string is already in json format
$str= '{"Products": [{"_id": "1"},{"_id": "2"}]}';
$decoded = json_decode($str,true);
echo $decoded['Products'][0]['_id'];

Categories