php, from json decode to individual variables - php

I am trying to go from a cur request to a page with some info.
I have the curl working but I have trouble going from the decode json to individual php variables. the conten after json_decode is:
object(stdClass)#1 (2) { ["response"]=> object(stdClass)#2 (2) { ["request"]=> string(20) "mailboxes/status/get" ["result"]=> string(1) "0" } ["status"]=> string(7) "success" }
I need the value of result which is 0 here.
Thanks in advance.

$result = $data->response->result;
Assuming the variable $data is where you stored your json_decode. It returns an instance of stdClass, and viewing the vardump, you can see the structure and get the data you want.

Related

PHP: how can I access JSON object

I'm sending this JSON:
[{"tipo":""},{"activo":""},{"titulo":"Servicoasd B"},{"texto":"asdasdasd"}]
to a php file via post method.
There, i do
$obj = json_decode($_POST['sentJson']);
However, I seem to be unable to access the elements of the JSON.
var_dump(($obj));
Shows the object:
array(4) {
[0]=>
object(stdClass)#2 (1) {
["tipo"]=>
string(0) ""
}
[1]=>
object(stdClass)#3 (1) {
["activo"]=>
string(0) ""
}
[2]=>
object(stdClass)#4 (1) {
["titulo"]=>
string(9) "Servico B"
}
[3]=>
object(stdClass)#5 (1) {
["texto"]=>
string(6) "asdasd"
}
}
But if I try
$obj['texto'];
$obj->{'texto'};
$obj[0]['texto'];
$obj[0];
It shows "undefined index texto" or "trying to get property of non object in" and the last one "Object of class stdClass could not be converted to string in". I'm very new to PHP, but still I can't seem to notice what I'm doing wrong. Any help would be appreciated.
Your JSON is a serialized array of four completely different objects, so when you run json_decode, that's what you get: an array.
If you want to access your objects inside that array, access them like you would any other indexed array:
$list = json_decode(...);
foreach($list as $obj) {
var_dump($obj)
}
Or target them explicitly using plain old numerical access.
$list = json_decode(...);
$last = $list[3];
$text = $last->texto;
But really the question you should be asking is why this is the JSON you get. An array with completely different objects at each position is terrible data, and should be fixed.

Accessing array with nested objects

I have an api wrapper i am using that returns something like this
object(stdClass)#7 (1) {
[0]=>
object(stdClass)#6 (2) {
["contactId"]=>
string(2) "nV"
["email"]=>
string(31) "email#domain.com"
}
}
how do i access the email part with PHP
Cast your API returned data to an array.
For example you are saving API returned data in $result variable. Cast it to an array.
$arrayResult = (array) $result;
echo $arrayResult[0]->email;
Try this.

PHP JSON decoding - accessing object

I'm trying to extract a value from a JSON string that's in my program. The output of var_dump($obj); is this:
object(stdClass)#1 (1) {
["BTC"]=>
object(stdClass)#2 (2) {
["value"]=>
float(403.645)
["currency"]=>
string(3) "GBP"
}
}
What I want to access is the value (currently 403.645 in this example), but I can't work out how to do it.
I've tried $obj->value and other combinations, but get nowhere; it appears to me that this is an object inside an object and as a result I can't find out how to access it. Any help would be appreciated!

Parsing json_decode output

Im a little stuck on parsing json output. I am working blind with json and have tried some tutorials but cant seem to find what im looking for.
I am trying to use a service providers API which is doing the functions correctly. I am then getting the correct feedback from the provider in json format.
My code so far looks like;
$response = curl_exec($apicall);
$json_output = json_decode($response);
var_dump($json_output);
This then returns;
object(stdClass)#1 (2) {
["status"]=>
string(2) "OK"
["droplet"]=>
object(stdClass)#2 (5) {
["id"]=>
int(490021)
["name"]=>
string(20) "test.mydomain.com"
["image_id"]=>
int(374535)
["size_id"]=>
int(66)
["event_id"]=>
int(6403716)
}
}
What I'm looking for is a way to store the "OK" from "status" and the "490021" from "id" as variables.
Hope someone can help.
There's no need to store them as variables. When you use json_decode, it'll create a stdClass which you can access the variables, like:
$json_output = json_decode($response);
echo $json_output->id;

JSON data and PHP

I am retrieving data via JSON and PHP from a URL.
I am having difficulty breaking the object apart and displaying the data. The PHP code seems to be working until I get to the for loops.
$jsonurl = 'http://myweb/api.php';
$json = file_get_contents($jsonurl);
$json_output = json_decode($json);
foreach ($json_output->Monitoring AS $monitoring) {
foreach ($monitoring->Status AS $Status){
echo $Status->Emailed;
echo $Status->Status;
}
Here is my data structure:
object(stdClass)#12 (1)
{ ["Monitoring"]=> array(10) { [0]=> object(stdClass)#13 (14)
{
["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily"
["Emailed"]=> string(1) "0" }
[1]=> object(stdClass)#14 (14) {
["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily"
["Emailed"]=> string(1) "0" }
[2]=> object(stdClass)#15 (14) {
["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily"
["Emailed"]=> string(1) "0" }
[3]=> object(stdClass)#16 (14) {
["Status"]=> string(30) "HTTP/1.1 302 Moved Temporarily"
["Emailed"]=> string(1) "0" }
} }
According to the data structure you put, you only need one foreach loop like:
$jsonurl = 'http://myweb/api.php';
$json = file_get_contents($jsonurl);
$json_output = json_decode($json);
foreach ($json_output->Monitoring AS $Status) {
echo $Status->Emailed;
echo $Status->Status;
}
in the first foreach loop, the value ($monitoring in your code, $Status in mine as I just renamed it) is not another array that you need to loop over. It would contain a std object with Emailed and Status as keys.
First of all, are you sure your script returns actual JSON string? Did you json_encode it?
Did you compare the 'data structure' of the object before JSON and after decoding? Were there any differences? Maybe it is not at all about the foreach loops and JSON and the problem is instead in your data structure of sorts, which seems to consist of multiple sub-objects.
Alternative is to try and use associative arrays instead of objects in that context by returning json_decode($json,true) and treating it as an array.
At the outset, make sure you turn error reporting on so you can see what exactly is failing.
An improper format passed to json_decode will just return false. It is one of the limitations of PHP's json handling that they are trying to address in the next release by creating a JSONSerializable interface. Make sure the return for decode is an instance of stdClass (or an array if you have passed the option for an associative array), otherwise the loops will never execute at all.

Categories