radi8
radi8

Reputation: 526

Build stdClass object for cURL exportt

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

Answers (1)

esQmo_
esQmo_

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

Related Questions