使用PHP+CURL发送POST请求向现有JSON数组新增数据的疑问
关于POST请求对现有JSON数组的影响分析
嘿,这个问题的关键其实不在于你的cURL代码,而是你调用的GeoDirectory v1 API的/farms端点是怎么设计的!我来给你拆解清楚:
核心结论
直接用POST请求发送到/wp-json/geodir/v1/farms这个集合端点,大概率是创建新的农场条目,而不是修改或追加到现有JSON数组里。如果你的目标是给已有的某个农场的数组字段添加数据,那这个请求方式和端点都不对哦。
具体分析
REST API的设计惯例里:
POST通常用于创建新资源(比如新增一个农场)PUT/PATCH才是用于修改现有资源(比如更新某个农场的字段,包括向数组里追加数据)
针对GeoDirectory的这个API来说,/farms作为集合端点,POST请求会生成一个全新的农场条目,和你现有的数组数据完全无关。如果要操作现有农场的数组字段,你需要:
- 定位到具体的农场ID,比如
/wp-json/geodir/v1/farms/{你的农场ID} - 使用
PUT请求(发送包含更新后完整数组的JSON),或者如果API支持的话用PATCH请求(只发送要追加的增量数据)
代码示例(追加数组数据)
假设你要给ID为123的农场的某个数组字段(比如gallery_images)追加新数据,你可以这么做:
// 1. 先获取目标农场的现有数据 $farmId = 123; $ch = curl_init("http://www.barn-door.co.uk/wp-json/geodir/v1/farms/{$farmId}"); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array( 'Authorization: '.$authToken, 'Content-Type: application/json' ) )); $existingFarm = json_decode(curl_exec($ch), true); curl_close($ch); // 2. 把新数据追加到目标数组里 $newImages = ["https://example.com/new-img1.jpg", "https://example.com/new-img2.jpg"]; $existingFarm['gallery_images'] = array_merge($existingFarm['gallery_images'], $newImages); // 3. 用PUT请求发送更新后的数据 $ch = curl_init("http://www.barn-door.co.uk/wp-json/geodir/v1/farms/{$farmId}"); curl_setopt_array($ch, array( CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array( 'Authorization: '.$authToken, 'Content-Type: application/json' ), CURLOPT_POSTFIELDS => json_encode($existingFarm) )); $response = curl_exec($ch); // 可以在这里处理响应,比如检查是否更新成功 curl_close($ch);
额外提醒
如果GeoDirectory的API支持PATCH请求,你可以不用获取完整数据,直接发送要追加的数组片段(具体要看API是否支持这种增量更新的格式),这样会更高效。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

