Cannot parse JSON response - php

I am trying to parse my JSON response so I can print a specific value. Please help me in the right direction.
I am getting the following response:
{
"services": [{
"id": "9999999",
"domainname": "example.com",
"total": "100.90",
"status": "Active",
"billingcycle": "Monthly",
"date": "2017-11-25",
"category": "mobile phone",
"url": "example.com",
"name": "Iphone"
}]
}
How can I be able to print only the "name" value of this JSON value?
What I tried:
$someData = json_decode($response, TRUE);
// this print the whole response
print_r($someData);
foreach($someData['services'] as $result) {
echo $result['name'], '<br>';
}
But the foreach loop does not print the value which I need from the JSON response. What's wrong with this piece of PHP code?
Update: edited the json the first name was domainname my bad

You have a simple syntax error here
echo $result['name'],'<br>';
Try this
echo $result['name']. '<br>';
with a . dot instead of a comma ,
Otherwise It works fine as you can see here.
http://sandbox.onlinephpfunctions.com/code/9be6789973b0e70772403a786b379749f6db0a7a
I suggest turning error reporting on.
<?php
error_reporting(-1);
ini_set('display_errors', 1);
And you will be able to see most of these issues more clearly.

Related

How to extract JSON data with PHP

I'm trying to extract the value from the event key (delivered) using PHP. I thought the follow would work below but I'm getting no results. I know this is probably a simple thing to do and probably looking too far into it.
How I am trying to extract the value
$status = json_decode($status, true);
echo $status[1]['event'];
Here is my JSON file
{
"events":[
{
"email":"email#gmail.com",
"date":"2020-02-17T22:16:58.000+01:00",
"subject":"PHPMailer SMTP test",
"messageId":"<hdskjfjsdhfsjdkfdksh>",
"event":"delivered",
"tag":"",
"from":"test#gmail.com"
}
]
}
Any help would be appreciated :)
The first issue is that your JSON file is wrong formatted. It should be:
{
"events": [
{
"email": "email#gmail.com",
"date": "2020-02-17T22:16:58.000+01:00",
"subject": "PHPMailer SMTP test",
"messageId": "74483437597589347843758934759",
"event": "delivered",
"tag": "",
"from": "test#gmail.com"
}
]
}
Second, $status[1]['event'] is also wrong. You should use $status['events'].
I figured it out. So I am parsing a json response from CURL...
$response = curl_exec($curl);
I changed this
$status = json_decode($status, true);
echo $status['events'][0]['event'];
to
$status = json_decode($response, true);
echo $status['events'][0]['event'];
I totally missed that mistake. Thanks to everyone who reach out!

How to put an API return string into an array

I have a string that i get from an API and i wish i could put it in a array so i could check the values that came from the return.
String return example:
{
"code":"000",
"message":"XXX",
"date":"2018-05-17",
"hour":"09:16:09",
"revision":"",
"server":"XX",
"content":{
"nome":{"info":"SIM","conteudo":[{"field1":"XXXX","field2":"XX"}]}
}
}
What I need:
echo $string['code'];
Javascript has no problem with JSON encode command. But how can I do it with PHP?
First of all your JSON data seems to be invalid (Some brackets missing). It needs to be like this:-
{
"code": "000",
"message": "XXX",
"date": "2018-05-17",
"hour": "09:16:09",
"revision": "",
"server": "XX",
"content": {
"nome": {
"info": "SIM",
"conteudo": [{
"field1": "XXXX",
"field2": "XX"
}]
}
}
}
Now You need to decode this JSON data and then get data based on the index
$array = json_decode($json,true);
echo $array['code'];
Output:-https://eval.in/1005949
You can decode the JSON string to Array in PHP.
$str = '{"code":"000","message":"XXX","date":"2018-05-17","hour":"09:16:09","revision":"","server":"XX","content":{"nome":{"info":"SIM","conteudo":[{"field1":"XXXX","field2":"XX"}]}';
$decodedValue = json_decode($str, true);
var_dump($decodedValue);
Your example string is not valid json, you are missing some closing brackets.
This should be the correct way:
'{"code":"000","message":"XXX","date":"2018-05-17","hour":"09:16:09","revision":"","server":"XX","content":{"nome":{"info":"SIM","conteudo":[{"field1":"XXXX","field2":"XX"}]}}}'
As for your question. in PHP you can easily use json_decode
Example:
<?php
$json = '{"code":"000","message":"XXX","date":"2018-05-17","hour":"09:16:09","revision":"","server":"XX","content":{"nome":{"info":"SIM","conteudo":[{"field1":"XXXX","field2":"XX"}]}}}';
$decoded_json = json_decode($json, true);
echo $decoded_json['code'];
You can see it working here

decode json file with php

I am trying to decode a json file with php, but it's not displaying anything. The code I have so far:
PHP
$str = file_get_contents('llt_stops.json');
$json = json_decode($str, true);
print_r($json, true);
JSON
{
"stops": [
{
"id": "1",
"name": "Andreaskyrkan",
"locId": "740037195"
},
{
"id": "2",
"name": "Ankarkronan",
"locId": "740037329"
},
{
"id": "3",
"name": "Arcushallen",
"locId": "740037262"
}
]
}
I've also tried with a foreach loop, but it doesn't display anything either.
foreach ($json['stops'] as $field => $value) {
// Use $field and $value here
}
Update:
I get this error, don't know whats wrong with the loop:
Invalid argument supplied for foreach()
Use
print_r($json);
With true it returns the value, does not print it.
It works now. It was the swedish characters in the json file that were not correctly displayed. I changed them from ? to å ä ö, and it worked.

How do I get the ErrorCode variable value from the response variable after message sending using CURL?

After executing CURL I am getting the $result variable value as:
{
"ErrorCode": "000",
"ErrorMessage": "Success",
"JobId": "6878b812-766d-48a2-9dae-2b0edf2d84d4",
"MessageData": [{
"Number": "919730842844",
"MessageParts": [{
"MsgId": "919730842844-64a40d7611f94c03bea1045fdfa9bac5",
"PartId": 1,
"Text": "\u0027messagecontentsmstest\u0027"
}]
}]
}
Now i need to check for the ErrorCode == 000, so how can I get the value of individually ErrorCode?
This response received is like JSON.
So I thought to decode it as an json_decode:
$chk = json_decode($result);
echo $chk->ErrorCode;
or we can even try in another way like,
$array = json_decode($result, true);
echo $array['ErrorCode'];

Parsing JSON object in PHP using json_decode

I tried to request the weather from a web service supplying data in JSON format. My PHP request code, which did not succeed was:
$url="http://www.worldweatheronline.com/feed/weather.ashx?q=schruns,austria&format=json&num_of_days=5&key=8f2d1ea151085304102710";
$json = file_get_contents($url);
$data = json_decode($json, TRUE);
echo $data[0]->weather->weatherIconUrl[0]->value;
This is some of the data that was returned. Some of the details have been truncated for brevity, but object integrity is retained:
{ "data":
{ "current_condition":
[ { "cloudcover": "31",
... } ],
"request":
[ { "query": "Schruns, Austria",
"type": "City" } ],
"weather":
[ { "date": "2010-10-27",
"precipMM": "0.0",
"tempMaxC": "3",
"tempMaxF": "38",
"tempMinC": "-13",
"tempMinF": "9",
"weatherCode": "113",
"weatherDesc": [ {"value": "Sunny" } ],
"weatherIconUrl": [ {"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png" } ],
"winddir16Point": "N",
"winddirDegree": "356",
"winddirection": "N",
"windspeedKmph": "5",
"windspeedMiles": "3" },
{ "date": "2010-10-28",
... },
... ]
}
}
}
This appears to work:
$url = 'http://www.worldweatheronline.com/feed/weather.ashx?q=schruns,austria&format=json&num_of_days=5&key=8f2d1ea151085304102710%22';
$content = file_get_contents($url);
$json = json_decode($content, true);
foreach($json['data']['weather'] as $item) {
print $item['date'];
print ' - ';
print $item['weatherDesc'][0]['value'];
print ' - ';
print '<img src="' . $item['weatherIconUrl'][0]['value'] . '" border="0" alt="" />';
print '<br>';
}
If you set the second parameter of json_decode to true, you get an array, so you cant use the -> syntax. I would also suggest you install the JSONview Firefox extension, so you can view generated json documents in a nice formatted tree view similiar to how Firefox displays XML structures. This makes things a lot easier.
If you use the following instead:
$json = file_get_contents($url);
$data = json_decode($json, TRUE);
The TRUE returns an array instead of an object.
Try this example
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345
http://php.net/manual/en/function.json-decode.php
NB - two negatives makes a positive . :)
Seems like you forgot the ["value"] or ->value:
echo $data[0]->weather->weatherIconUrl[0]->value;
When you json decode , force it to return an array instead of object.
$data = json_decode($json, TRUE); -> // TRUE
This will return an array and you can access the values by giving the keys.
You have to make sure first that your server allow remote connection so that the function file_get_contents($url) works fine , most server disable this feature for security reason.
While editing the code (because mild OCD), I noticed that weather is also a list. You should probably consider something like
echo $data[0]->weather[0]->weatherIconUrl[0]->value;
to make sure you are using the weatherIconUrl for the correct date instance.

Categories