Parse json with PHP. Getting Undefined property: stdClass errors - php

I am having some issues parsing a json file from Jenkins using PHP
{
"actions" : [
{
"causes" : [
{
"shortDescription" : "Started by an SCM change"
}
]
},
{
},
{
},
{
"buildsByBranchName" : {
"origin/release_5.6.0" : {
"buildNumber" : 242,
"buildResult" : null,
"marked" : {
"SHA1" : "fde4cfd86b8511d328037b9e9c55876007bb6e67",
"branch" : [
{
"SHA1" : "fde4cfd86b8511d328037b9e9c55876007bb6e67",
"name" : "origin/release_5.6.0"
}
]
},
"revision" : {
"SHA1" : "fde4cfd86b8511d328037b9e9c55876007bb6e67",
"branch" : [
{
"SHA1" : "fde4cfd86b8511d328037b9e9c55876007bb6e67",
"name" : "origin/release_5.6.0"
}
]
}
},
"origin/release_5.7.0" : {
"buildNumber" : 315,
"buildResult" : null,
"marked" : {
"SHA1" : "ae2cbf69a25e0632e0f1d3eeb27a907b154efce0",
"branch" : [
{
"SHA1" : "ae2cbf69a25e0632e0f1d3eeb27a907b154efce0",
"name" : "origin/release_5.7.0"
}
]
},
"revision" : {
"SHA1" : "ae2cbf69a25e0632e0f1d3eeb27a907b154efce0",
"branch" : [
{
"SHA1" : "ae2cbf69a25e0632e0f1d3eeb27a907b154efce0",
"name" : "origin/release_5.7.0"
}
]
}
},
I have tried doing the following
//Read in JSON object
$json_file2 = file_get_contents('url.com/json');
//Decode JSON file
$test = json_decode($json_file2); //object
//print_r($json_file2);
echo $test->causes;
I am also trying to access the different sections in "buildsByBranchName". I have tried many different variations of the code above, but I keep getting "Undefined property: stdClass" errors.

You are not accessing that value properly. causes resides under actions which is an array. Your code also won't work because causes is an array.
// This is an array so you can't use echo here.
$causes = $test->actions[0]->causes;
// echo out the shortDescription
echo $causes[0]->shortDescription;
or
echo $test->actions[0]->causes[0]->shortDescription;

Related

Reading data from an array with json

In a php script I have the following
$jsonurlpers = "https://api.openarch.nl/1.1/records/show.json?archive=nha&identifier=8554bfba-9fd9-4ca2-876c-feb7da095d6c";
$jsondatapers = file_get_contents($jsonurlpers);
That string I want to decode with the next command
$jsonpers = json_decode($jsondatapers ,true)[0];
But somewhere it did not work...
When I go to to the #jsonulpers I see :
Event
EventType "Overlijden"
EventDate
Year "1901"
Month "7"
Day "7"
EventPlace
Place "Egmond-Binnen"
RelationEP
Can some one tell me how I can read the value behind EventType in a variable? I tried different options but none works...
Thanks,
Fred
I did try this
e.g.
$itemevent = $jsonpers['Event'];
$itemeventtype = $itemevent['EventType']);
abs I thought
$itemeventtype would have a value of "Overlijden", but it was empty
The (json-)output from the url you gave looks like this:
{
"Event" : {
"EventType" : "Overlijden",
"EventDate" : {
"Month" : "7",
"Day" : "7",
"Year" : "1901"
},
"EventPlace" : {
"Place" : "Egmond-Binnen"
}
},
"RelationEP" : [
{
"RelationType" : "Overledene",
"EventKeyRef" : "Event1",
"PersonKeyRef" : "Person1"
},
{
"PersonKeyRef" : "Person2",
"RelationType" : "Vader",
"EventKeyRef" : "Event1"
},
{
"PersonKeyRef" : "Person3",
"RelationType" : "Moeder",
"EventKeyRef" : "Event1"
}
],
"Source" : {
"SourcePlace" : {
"Place" : "Egmond-Binnen / Egmond-Binnen"
},
"SourceAvailableScans" : {
"Scan" : {
"Uri" : "https://nha.blob.core.windows.net/scans/BS%20Overlijden/Egmond-Binnen/1901/RNH_O_EGB_1901_006-a.jpg",
"OrderSequenceNumber" : "1"
}
},
"SourceLastChangeDate" : "2015-07-31",
"SourceRemark" : {
"Value" : "Datadump ExportBS+Overlijden_20210302_102010.csv van NHA via e-mail"
},
"SourceReference" : {
"InstitutionName" : "Noord-Hollands Archief",
"DocumentNumber" : "14",
"Place" : "Haarlem"
},
"RecordGUID" : "{8554bfba-9fd9-4ca2-876c-feb7da095d6c}",
"SourceIndexDate" : {
"To" : "1901-12-31",
"From" : "1901-01-01"
},
"SourceDate" : {
"Year" : "1901",
"Month" : "7",
"Day" : "8"
},
"SourceType" : "BS Overlijden"
},
"Person" : [
{
"BirthPlace" : {
"Place" : "Egmond-Binnen"
},
"PersonName" : {
"PersonNameLastName" : "Baltus",
"PersonNameFirstName" : "Aafje"
},
"Gender" : "Vrouw",
"Age" : {
"PersonAgeYears" : "8 maanden"
}
},
{
"PersonName" : {
"PersonNameFirstName" : "Jan",
"PersonNameLastName" : "Baltus"
}
},
{
"PersonName" : {
"PersonNameLastName" : "Kuijper",
"PersonNameFirstName" : "Grietje"
}
}
]
}
After "Person":, you see a [, which means there is an array of Persons.
The first person does have a "BirthPlace", for the other persons it seems to be unknown what the "BirthPlace" is, because it is not mentioned in the json.
print($jsonpers["Person"][0]["PersonName"]["PersonFirstName"] should be: "Aafje"
and
print($jsonpers["Person"][2]["PersonName"]["PersonFirstName"] should be: "Grietje"

Using variable for json_decode

I need to pass on a variety of variables from mysql queries to create a json file and post every block whenever $sku changes. I can retrieve the data just fine, but when I try to use json_decode, it either says syntax error or returns null, or worse, treats everything as text.
$updatedData = '{
"items" : [
{
"barcode" : $barkod,
"title" : $title,
"productMainId" : $sku,
"brandId" : $marka,
"categoryId" : 387,
"stockCode" : $sku,
"dimensionalWeight" : 0,
"description" : $desc,
"vatRate" : 0,
"images" : [
{
"url" : $image0link
}
],
"attributes" : [
{
"attributeId" : 343,
"attributeValueId" : $gender
},
{
"attributeId" : $mekanizma1,
"attributeValueId" : $mekanizma2
},
{
"attributeId" : $kasasekli1,
"attributeValueId" : $kasasekli2
},
{
"attributeId" : $camcinsi1,
"attributeValueId" : $camcinsi2
},
{
"attributeId" : $camsekli1,
"attributeValueId" : $camsekli2
},
{
"attributeId" : $kordonmlz1,
"attributeValueId" : $kordonmlz2
},
{
"attributeId" : $kordonrengi1,
"attributeValueId" : $kordonrengi2
},
{
"attributeId" : $kasacap1,
"attributeValueId" : $kasacap2
},
{
"attributeId" : $kasarengi1,
"attributeValueId" : $kasarengi2
},
{
"attributeId" : $sugecirmezlik1,
"attributeValueId" : $sugecirmezlik2
},
{
"attributeId" : $kasamlz1,
"attributeValueId" : $kasamlz2
},
{
"attributeId" : 47,
"customAttributeValue" : $kadranrengi
}
],
"cargoCompanyId" : 1
"shipmentAddressId" : 409558
"returningAddressId" : 409558
}
]
}';
{$json = json_decode($updatedData, true);
if (is_null($json)) {
die("Json decoding failed with error: ". json_last_error());
}
var_dump($updatedData);}
I'd appreciate any help. Thanks in advance.

reading parts of a multi-level array from JSON file

Ok, I'm hoping this is not the same as other questions and I have looked for similar but can't find the answer... so here goes.
I get a JSON file and need to read the contents into a database. No sweat.
However I am having issue with reading the lowest levels as there can be a duplicate array.
I have all the data down to "comp".
Sample JSON file:
{
"code" : 0,
"format" : 2,
"s_data" :
{
"name" : "Lance",
"club" : "Southern"
},
"d_data" :
{
"errorcode" : 3,
"errormsg" : ""
},
"timing" :
{
"elapsed_time" : "08:29",
"elapsed_time_secs" : 509,
"comp" :
[
{
"no" :
[
{
"sno" : 0,
"xpos" : 230.9,
"ypos" : 97.2
},
{
"sno" : 1,
"xpos" : 132.4,
"ypos" : 258.3
},
{
"sno" : 2,
"xpos" : 135.5,
"ypos" : 176.7
},
]
},
{
"no" :
[
{
"sno" : 0,
"xpos" : 250.9,
"ypos" : 92.2
},
{
"sno" : 1,
"xpos" : 182.4,
"ypos" : 158.3
},
{
"sno" : 2,
"xpos" : 145.5,
"ypos" : 192.7
}
]
}
]
}
}
So I want to now read the "no" data, but just the first instance of "no"... that is: sno, xpos, ypos foreach "sno" entry..
I'm thinking:
$mydata = json_decode(sample.json, true);
foreach($mydata->comp[0]->no as $values)
{
echo $values->sno . "\n";
}
I get nothing back.
Any kind assistance appreciated.
If you decode it in an associative array, you have to use it according, try this code:
foreach($mydata['timing']['comp'][0]['no'] as $values)
{
echo $values['sno'] . "\n";
}
where all accesses to $mydata are using array style notation.
You have also to consider that the one posted is not a valid JSON string.
EDIT 20160122:
JSON string is now valid.

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.

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;
}

Categories