Reputation: 526
I am trying to build an output JSON string to use with a RESTFUL API utilizing cURL.
While typically, this is not a difficult process, the format of the output I need is a little different. The JSON string cannot have any identifiers on the embedded arrays/objects. See this example. Notice that the top element is Locations, the the embedded locations do not have a field name identifier (i.e. 1 or first stop, etc). I need to recreate this as defined, but cannot find the proper technique to crate this structure.
{ "locations": [ { "postalCode": "30303", "country": "us", "stopType": "pickup", "sequence": 0, "stopDate": "2022-10-01" }, { "postalCode": "60601", "country": "us", "stopType": "delivery", "sequence": 1 } ], "equipment": { "type": "dry-van-53", "description": "Dry freight", "weight": 30000, "weightUOM": "lbs", "isHazardous": false }, "isLiveLoad": true
Reviewing as much as I can from this site and others, when using the stdCLass structure, or even the Array structures, each subsequent element when being added to the structure requires a dynamic field name. When I try this and submit the cURL JSON, it fails the validation.
$object->$fieldName = $value;
Even building an array and converting to the OBJECT requires the unique field name. I cannot get past the field name issue! If I let the code define the appended object, PHP will assign an iterator automatically:
$object->fieldName[] = $value;
I am the sole developer here and I am beating my head against the wall trying to do this simple process. Any help is greatly appreciated. I know I am missing something easy, but cannot see it.
Upvotes: -1
Views: 39
Reputation: 1709
You can create a JSON string without field name identifiers by usinng an array of objects.
$locations = array(
(object)array(
"postalCode" => "30303",
"country" => "us",
"stopType" => "pickup",
"sequence" => 0,
"stopDate" => "2022-10-01"
),
(object)array(
"postalCode" => "60601",
"country" => "us",
"stopType" => "delivery",
"sequence" => 1
)
);
$equipment = (object)array(
"type" => "dry-van-53",
"description" => "Dry freight",
"weight" => 30000,
"weightUOM" => "lbs",
"isHazardous" => false
);
$data = (object)array(
"locations" => $locations,
"equipment" => $equipment,
"isLiveLoad" => true
);
$json = json_encode($data, JSON_PRETTY_PRINT);
echo $json;
You create an array of stdClass objects for the locations field and a single stdClass object for the equipment field. The $data variable is then cast to an stdClass object and encoded as a JSON string using the json_encode function.
Upvotes: 2