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
相关产品推荐
相关产品推荐

