How to Access JSON Element - php

I have one json i wanted to print "formatted_address" element from that json
Json
{
"html_attributions" : [],
"results" : [
{
"formatted_address" : "Narayan Peth, Pune, Maharashtra 411030, India",
"geometry" : {
"location" : {
"lat" : 18.515797,
"lng" : 73.852335
}
},
"icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/shopping-71.png",
"id" : "3a25975b3806df28aa79ac4a8d954c307be4aa57",
"name" : "Aditya Medical",
"place_id" : "ChIJJxwmOHDAwjsRjRDO4LnGJ-I",
"reference" : "CmRSAAAA3E7ih55-2BZjRQcw_URQ2gwi8eWb5HU6hdfNUj_TqtDJ7TtASVMowcuWMkohNjp7F6UKuGsMuR-IlzZEt4YUJyzNxzWg-TYy6hyN8P5n2asAO6ztZeU3oHZdH7OBFFW_EhBe4cQbAU99oILcDmvv_gOhGhR7jzP0Z9-mDrncd5Gr9hOY7aOqRg",
"types" : [ "pharmacy", "health", "store", "point_of_interest", "establishment" ]
}
],
"status" : "OK"
}
I tired to print using but unable to print it.
foreach (json_decode($address[0]->Response) as $obj){
print_r($obj['results']['formatted_address']);
}

You need to set second param as true to get json as array. Also yourformatted_address is agin inarray so need to pass index in it
foreach (json_decode($address[0]->Response, true) as $obj){
print_r($obj['results'][0]['formatted_address']);
}
DEMO

That can be a solution :
$jsonAsArray = json_decode($yourJson, true);
$results = $array["results"][0];
var_dump($results['formatted_address']);
Good luck

Try
foreach (json_decode($address[0]->Response, true) as $obj){
print_r($obj['results']['formatted_address']);
}
json_decode has a second parameter to determine the returned result format - object or array.

I Try like #Plamen Nikolov, but but it doesn't work. And I Try change 'True' to 1 it's work!
foreach (json_decode($address[0]->Response, 1) as $obj){
print_r($obj['results']['formatted_address']);
}

Try
foreach (json_decode($address[0]->Response)->results as $obj){
print_r($obj->formatted_address);
}
json_decode($address[0]->Response) will give you an object. You should not use like array. so you should use "->" instead of array form. Better you can put the result on foreach and get the data of formatted_address from that $obj
--

Related

Laravel 5 read Json file give error `Response.php line 403`

I want to read json file from database directory, but give The Response content must be a string or object implementing __toString(), "boolean" given. error. Bellow is my code :
$json = file_get_contents('database/query_templates/course.json');
$data = json_decode($json, TRUE);
echo '<pre/>'; print_r($data); exit;
course.json file content :
{
"post_filter" : {
"operator" : [
{
"operator" : [
{
"range" : {
"created_at" : {
"gte" : "log_start_date",
"lte" : "log_end_date",
"format" : "yyyy-MM-dd"
}
}
},
{
"terms" : {
"search_param_user_action.id" : "user_select_array"
}
}
]
},
{
"operator" : [
{
"operator" : [
"conduct_days_multi"
]
},
{
"operator" : [
"dropdowns"
]
}
]
},
{
"query" : {
"multi_match" : {
"query" : "x",
"fields" : [
"resource_search_columns"
],
"operator" : "operator"
}
}
}
]
}
}
for any help thanks.
Sometimes some php releasees not supported get_file_contents() or this func return type string but not only return string everytime, sometimes return boolean value bacause it's working on the byte codes, you can try traditional file operation methods or you can try convert to string.

how to add a nested element in already existing JSON with PHP

for example if I have a simple JSON like this:
{
"data": [
"pets" : "none",
"parents": {"mom":"Anna", "dad":"Bob"},
"ancestors": { "children":[
{
"name": "Joe",
"age" : "10"
},
{
"name" : "Ron",
"age" : "4"
}
]}
]
}
and let's say I want to add a child "Jessica" of age "8" with PHP
how would i do that?
so far I know i need to use json_decode to access the JSON, json_encode to save something in it
but if I need to add a $newchild = array("name" : "Jessica", "age" : "8"); and add it how would it do it in data->ancestors->children ?
When you use json_decode, you are converting the json string to php array
So, you can add the new element like so:
$jsonstring = '...the string...';
$jsonarray = json_decode($jsonstring, true);
$jsonarray['data']['ancestors']['children'][] = array('name'=>'Jessica', 'age'=>8);
Make print_r of the $jsonarray to see it's contents
and then of course you could print it again to json string
$jsonstring = json_encode($jsonarray);

Updating JSON file with PHP

I am trying to modify my JSON file with a PHP solution :
From this file :
[
{
"id":40764465700014,
"Pays":"France",
"lat":43.221401,
"long":6.1424990000000435
}
]
To this file :
[
{"id" : "40764465700014",
"Pays" : { "add" : "France" },
"lat" : { "add" : 43.221401 },
"long" : { "add" : 6.1424990000000435}
}
]
Do you have an idea ?
Thanks
Just use json_decode() and convert it to array , then just encode the array into json using json_encode(). Use the code below
<?php
$json = '[
{
"id":40764465700014,
"Pays":"France",
"lat":43.221401,
"long":6.1424990000000435
}
]';
$array= json_decode($json,true);
echo json_encode($array[0]);
Hope this helps you

Json decode in php basics

I'm trying to learn json in php. Here's my json result from a ElasticSearch query.
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : null,
"hits" : [ {
"_index" : "xenforo",
"_type" : "post",
"_id" : "1816069",
"_score" : null,
"sort" : [ 1365037907 ]
} ]
}
}
I assume that my php code will look something like this:
$myData = json_decode($result);
foreach($myData->hits as $var) {
$post_id[] = $var->_id;
}
Been looking for the answer for hours, I sure do appreciate any help. Thank you.
Edit: Here is the answer:
foreach($myData->hits->hits as $var) {
$post_id[] = $var->_id;
}
You're one ->hits short if you look at your JSON structure...
{
"hits" : {
"hits" : [ {
"_id" : "1816069",
$myData = json_decode($result);
foreach($myData->hits->hits as $hit) {
$post_id[] = $hit->_id;
}

Parsing JSON results

I understand how to parse json with PHP, however I don't understand how to read it with the eye. Can someone please help me understanad this?
Here is my code
<?php
$json = file_get_contents('json.txt');
$json_output = json_decode($json);
foreach ( $json_output->query as $stf )
{
echo "{$stf->response->domains->name}\n";
}
?>
Here is a sample of the json result
{ "query" : { "host" : "test.com",
"tool" : "pro"
},
"response" : { "domain_count" : "13",
"domains" : [ { "last_resolved" : "2012-01-11",
"name" : "test1.com"
},
{ "last_resolved" : "2012-01-11",
"name" : "test2.com"
},
As you can see I tried query->response->domains->name and it didn't work.
How would I tried name?
Thank you in advance
query->response->domains is an indexed array, so you need to get an index, say [0], and then get the ->name from that.
echo $stf->response->domains[0]->name."\n";
foreach ( $json_output->query->response->domains as $domain )
{
echo $domain->name;
}
Study this http://json.org/
If you're trying to read it by eye, it might help to reformat:
{
"query" : {
"host" : "test.com",
"tool" : "pro"
},
"response" : {
"domain_count" : "13",
"domains" : [{
"last_resolved" : "2012-01-11",
"name" : "test1.com"
},{
"last_resolved" : "2012-01-11",
"name" : "test2.com"
}]
}
}

Categories