You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何构建无键名嵌套数组的RESTful API cURL JSON输出?

解决PHP生成无键名嵌入数组/对象的JSON格式问题

核心思路很直接:PHP里连续数字索引的数组,经过json_encode处理后会直接转成JSON数组,数组里的元素如果是对象(不管是stdClass还是强制转换的关联数组),就会变成JSON里无键名的对象结构,正好匹配你需要的格式。

目标JSON示例

假设你需要生成的目标结构是这样的:

{
"locations": [
{"latitude": 39.9042, "longitude": 116.4074},
{"latitude": 31.2304, "longitude": 121.4737}
]
}

两种PHP实现方式

方式一:直接初始化索引数组

// 创建主数据对象
$data = new stdClass();
// 给locations赋值为包含匿名对象的索引数组
$data->locations = [
    (object)[
        'latitude' => 39.9042,
        'longitude' => 116.4074
    ],
    (object)[
        'latitude' => 31.2304,
        'longitude' => 121.4737
    ]
];

// 生成格式化后的JSON
$json = json_encode($data, JSON_PRETTY_PRINT);

方式二:动态追加元素

如果需要循环或者逐步添加元素,直接用数组追加语法即可:

$data = new stdClass();
// 先初始化locations为空数组
$data->locations = [];

// 第一个位置对象
$loc1 = new stdClass();
$loc1->latitude = 39.9042;
$loc1->longitude = 116.4074;
$data->locations[] = $loc1;

// 第二个位置对象
$loc2 = new stdClass();
$loc2->latitude = 31.2304;
$loc2->longitude = 121.4737;
$data->locations[] = $loc2;

$json = json_encode($data);

注意事项

如果你的数组出现了非连续的数字索引(比如手动指定过键名,或者删除过元素),json_encode会把数组转成JSON对象而非数组。这时候用array_values()重置索引即可:

// 假设数组索引不连续
$brokenArray = [2 => $loc1, 5 => $loc2];
// 重置为连续数字索引
$fixedArray = array_values($brokenArray);
$data->locations = $fixedArray;

生成的JSON完全符合API要求,直接用cURL提交即可。

内容的提问来源于stack exchange,提问作者radi8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:37:26