为 cURL 导出构建 stdClass 对象

问题描述 投票:0回答:2

我正在尝试构建一个输出 JSON 字符串,以便与利用 cURL 的 RESTFUL API 一起使用。

虽然通常这不是一个困难的过程,但我需要的输出格式有点不同。 JSON 字符串在嵌入的数组/对象上不能有任何标识符。请参阅此示例。请注意,顶部元素是位置,嵌入的位置没有字段名称标识符(即 1 或第一站等)。我需要按照定义重新创建它,但找不到正确的技术来创建这个结构。

{ “地点”:[ { "邮政编码": "30303", “国家”:“我们”, "stopType": "接送", “序列”:0, “停止日期”:“2022-10-01” }, { “邮政编码”:“60601”, “国家”:“我们”, "stopType": "发货", “序列”:1 } ], “设备”: { “类型”:“干货车53”, "description": "干货", “重量”:30000, “重量单位”:“磅”, “isHazardous”:假 }, “isLiveLoad”:true

从本网站和其他网站尽可能多地查看,当使用 stdCLass 结构甚至数组结构时,添加到结构中的每个后续元素都需要动态字段名称。当我尝试此操作并提交 cURL JSON 时,验证失败。

$object->$fieldName = $value;

即使构建数组并转换为 OBJECT 也需要唯一的字段名称。我无法解决字段名称问题!如果我让代码定义附加对象,PHP 将自动分配一个迭代器:

$object->fieldName[] = $value;

我是这里唯一的开发人员,我正在用头撞墙试图完成这个简单的过程。任何帮助是极大的赞赏。我知道我错过了一些简单的东西,但看不到它。

php arrays json stdclass
2个回答
0
投票

您可以使用嵌套数组:

<?php

$locations = [];

$location1 = [
    "postalCode" => "30303",
    "country" => "us",
    "stopType" => "pickup",
    "sequence" => 0,
    "stopDate" => "2022-10-01"
];
array_push($locations, $location1);

$location2 = [
    "postalCode" => "60601",
    "country" => "us",
    "stopType" => "delivery",
    "sequence" => 1
];
array_push($locations, $location2);

$equipment = [
    "type" => "dry-van-53",
    "description" => "Dry freight",
    "weight" => 30000,
    "weightUOM" => "lbs",
    "isHazardous" => false
];

$output = [
    "locations" => $locations,
    "equipment" => $equipment,
    "isLiveLoad" => true
];

$json_output = json_encode($output);

echo $json_output;

此结构应与您所描述的内容相匹配,不需要内部位置数组的唯一字段名称。

{
    "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
    },
    "i

sLiveLoad": true
}

0
投票

您可以使用对象数组创建不带字段名称标识符的 JSON 字符串。

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

您为位置字段创建一个 stdClass 对象数组,为设备字段创建一个 stdClass 对象。然后,$data 变量被转换为 stdClass 对象,并使用 json_encode 函数编码为 JSON 字符串。

© www.soinside.com 2019 - 2024. All rights reserved.