向API发送JSON对象时出现解码失败错误求助
问题分析与解决方案
你的curl命令中,-d参数的引号使用错误,导致发送的JSON格式无效,API无法正确解码。
错误原因
原命令中-d后面多了一个开头的双引号:
-d '"{data1":"'"$data1"'", "data2": "'"$data2"'", "data3": "'"$data3"'", "data4": "'"$data4"'"}'
这会让发送的内容变成外层包裹双引号的字符串(比如"{data1:"value1", ...}"),而非合法的JSON对象,同时内部引号结构混乱,触发解析错误。
修正方案
方案1:直接修正引号格式
去掉-d参数开头的多余双引号,确保JSON结构正确:
curl -XPOST http://localhost:4000/create \ -H "Content-Type:application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{"data1":"'"$data1"'", "data2":"'"$data2"'", "data3":"'"$data3"'", "data4":"'"$data4"'"}'
方案2:用printf构建JSON(更易维护)
通过printf格式化JSON字符串,避免引号拼接混乱:
curl -XPOST http://localhost:4000/create \ -H "Content-Type:application/json" \ -H "Authorization: Bearer $TOKEN" \ -d "$(printf '{"data1":"%s", "data2":"%s", "data3":"%s", "data4":"%s"}' "$data1" "$data2" "$data3" "$data4")"
方案3:用jq生成合法JSON(处理特殊字符)
如果变量中包含双引号、反斜杠等特殊字符,推荐用jq自动转义,确保JSON完全合法:
curl -XPOST http://localhost:4000/create \ -H "Content-Type:application/json" \ -H "Authorization: Bearer $TOKEN" \ -d "$(jq -n --arg d1 "$data1" --arg d2 "$data2" --arg d3 "$data3" --arg d4 "$data4" '{data1: $d1, data2: $d2, data3: $d3, data4: $d4}')"
以上三种方案都能让你发送合法的JSON对象,API即可正常解析并返回基于变量的JSON响应。
内容的提问来源于stack exchange,提问作者Tyler Durden
相关产品推荐
相关产品推荐

