Using variable for json_decode - php

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.

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"

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.

Parse json with PHP. Getting Undefined property: stdClass errors

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;

How to order a mongoDB query by a field in an embedded document?

I have these documents in a mongoDB:
/* 1 */
{
"_id" : ObjectId("553ce99a39108e2b7c1edeb9"),
"coleccion" : "aplicaciones",
"nombre" : "Mascotas",
"descripcion" : "Censo de mascotas",
"tipo" : "privada"
}
/* 2 */
{
"_id" : ObjectId("553e316e39108e802a1edeb9"),
"coleccion" : "aplicaciones",
"nombre" : "otra aplicacionn",
"descripcion" : "w aplicacion",
"tipo" : "privada",
"campoId" : [
{
"id" : "1430145364",
"id_campo" : "553bffca39108eb163cff7aa",
"orden" : 90
},
{
"id" : "1430145368",
"id_campo" : "553bffed39108e346ccff7ab",
"orden" : 100,
"estado" : "0"
},
{
"id" : "1430145370",
"id_campo" : "553c001139108ebc63cff7aa",
"orden" : 29,
"estado" : "1"
},
{
"id" : "1430145395",
"id_campo" : "553c001139108ebc63cff7aa",
"orden" : 9,
"estado" : "0"
}
]
}
I need to query and sort the data in ascending order of each document using the field " campoId.orden " and have executed this query:
db.getCollection('aplicaciones').find({}).sort({'campoId.orden' : -1})
but I do not get the order I want.
can anyone suggest me a way?
In your documents orden in nested array, so you should use mongo aggregation. So below step will follow :
1> First check campoId exits or not $exists
2> Then unwind campoId array $unwind
3> Then group all fields $group
So query as below :
db.aplicaciones.aggregate({
"$match": {
"campoId": {
"$exists": true // check here campoId presents or not using exists
}
}
}, {
"$unwind": "$campoId" // unwind campoId array
}, {
"$sort": {
"campoId.orden": -1
}
},
//groups all fields
{
"$group": {
"_id": "$_id",
"coleccion": {
"$first": "$coleccion"
},
"nombre": {
"$first": "$nombre"
},
"descripcion": {
"$first": "$descripcion"
},
"tipo": {
"$first": "$tipo"
},
"campoId": {
"$push": "$campoId"
}
}
}).pretty()

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