如何通过CURL请求批量更新多个JSON字段?遇400错误求解决
解决CURL PUT请求批量更新JSON字段返回400错误的问题
你遇到的400错误本质是请求的JSON格式不符合规范,API无法正确解析请求体。下面先分析你试过的几种写法的问题,再给出正确的实现方式:
错误写法的问题分析
- 第一种写法:直接拼接两个独立的JSON对象,没有任何容器包裹,这不是有效的JSON结构,API完全无法识别。
- 第二种写法:用逗号分隔两个对象,但没有用数组
[]包裹,同样不符合JSON语法规则。 - 第三种写法:虽然用了数组包裹,但两个对象之间缺少逗号分隔,属于JSON语法错误。
正确的实现方式
首先确认你的API是否支持数组格式的批量更新请求体(从你尝试的写法来看,大概率是支持的),以下是修正后的合法CURL命令:
curl -X PUT \ http://192.168.1.256:123/api/accessories/123456789 \ -H 'accept: */*' \ -H "Authorization: Bearer $token" \ -H 'Content-Type: application/json' \ -d '[ { "characteristicType": "Saturation", "value": "30" }, { "characteristicType": "On", "value": "1" } ]'
注意事项:
- JSON数组内的每个对象之间必须用逗号分隔,这是你之前第三种写法遗漏的关键。
- 如果你的
$token变量需要在shell中正常解析,要把Authorization头的单引号改成双引号(单引号会阻止shell解析变量)。 - 如果执行后仍然返回400,建议查看API的官方文档,确认批量更新的请求体格式是否有特殊要求(比如是否需要将多个字段包裹在一个特定的顶层对象中,而非直接用数组)。
内容的提问来源于stack exchange,提问作者Eduardo Corona
相关产品推荐
相关产品推荐

