如何用jq将curl返回的JSON数组作为API请求体的非字符串值?
解决jq传递JSON数组时被转义为字符串的问题
问题核心是你用了--arg参数,它本来就是用来传递纯字符串的,所以JSON数组会被当成普通字符串转义处理。要传递原生JSON结构,得用jq专门的--argjson参数,或者直接通过管道传递数据。
下面是两种可行的方法:
方法1:先存变量再用--argjson传入
先把curl获取到的JSON数组存到变量里,再用--argjson把变量作为JSON数据传给jq:
# 先获取JSON数组 array_result=$(curl "你的API地址") # 构造新的JSON请求体,把数组作为"items"字段的值 jq --argjson items "$array_result" '{ "request_type": "batch", "items": $items }'
方法2:直接用管道传递(更简洁)
不需要中间变量,直接把curl的输出传给jq,让jq直接处理原生数组:
curl "你的API地址" | jq '{ "request_type": "batch", "items": . }'
这里的.代表jq接收到的原始输入(也就是curl返回的JSON数组),直接把它赋值给新JSON的items字段,自然就是原生数组格式,不会有转义问题。
简单总结:
--arg→ 传字符串,会转义JSON结构--argjson→ 传JSON数据,保留原结构- 管道直接传递 → 省去变量存储,更高效
内容的提问来源于stack exchange,提问作者Umang Pachaury
相关产品推荐
相关产品推荐

