我正在尝试构建一个输出 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
$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
}
您可以使用对象数组创建不带字段名称标识符的 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 字符串。