You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq从内联字符串读取数据而非标准输入?

直接用jq读取字符串中JSON数据的实用方法

嘿,这个需求我太熟了!其实不用绕弯子,jq本身就支持直接处理字符串形式的JSON,我给你分享两种好用的方法,完美实现你想要的类似jq '.field' "$my_json"的调用体验:

方法1:用--argjson参数(推荐,逻辑更清晰)

jq专门提供了--argjson参数来传递JSON格式的字符串,它会自动把传入的字符串解析成jq能识别的JSON对象,用法非常直观:

假设你的JSON字符串变量是这样的:

my_json='{"field": "hello jq", "nested": {"id": 123}}'

你可以直接这样调用jq:

jq '.field' --argjson input "$my_json" '$input'

如果要读取嵌套字段,比如.nested.id,只需要调整jq的查询表达式即可:

jq '.nested.id' --argjson input "$my_json" '$input'

原理很简单:--argjson input "$my_json"会把$my_json里的JSON字符串解析成jq内部的$input变量,后面的$input就是在jq表达式里引用这个变量,之后就可以正常查询任意字段了。

方法2:用Shell的Here String(兼容性更好)

如果你的jq版本比较旧(比如低于1.5),不支持--argjson,可以用Shell的Here String特性,它能直接把字符串当作标准输入传给jq,写法更简洁:

jq '.field' <<< "$my_json"

这个效果和echo "$my_json" | jq '.field'完全一致,但写法更紧凑,看起来就像是直接把字符串“喂”给jq一样。

为啥直接jq '.field' "$my_json"不行?

顺便解释下,jq默认会把第一个非选项参数当作文件名处理,直接传"$my_json"的话,jq会去寻找一个名字等于这个JSON字符串内容的文件,自然会报错“找不到文件”,所以必须用上面两种方法明确告诉jq:这是JSON内容,不是文件名。

内容的提问来源于stack exchange,提问作者user5047085

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:35:58