如何在jq中将JSON路径以字符串变量形式使用?
解决jq中使用字符串形式JSON路径取值的问题
你当前的写法返回null,是因为把"a.b"当成了单个顶层键名去查找,但你的JSON结构里根本没有名为a.b的顶层键,自然找不到对应值。要处理这种点分隔的路径字符串,需要把路径拆分成多个层级节点,逐层访问。
下面是两种可行的解决方法:
方法1:使用split+getpath函数
这是最简洁的方式,先把路径字符串按.分割成节点数组,再用getpath按数组路径取值:
echo '{"a": {"b": "aaa", "c": ""}, "d": "bbb"}' | jq '"a.b" as $key | $key | split(".") | getpath(.)'
执行后会返回目标值:"aaa"
方法2:使用reduce遍历路径节点
如果需要更灵活的处理逻辑(比如路径中包含特殊字符时可扩展),可以用reduce逐个遍历拆分后的节点,逐层访问对象:
echo '{"a": {"b": "aaa", "c": ""}, "d": "bbb"}' | jq '"a.b" as $key | reduce ($key | split("."))[] as $node (.; .[$node])'
这种方式同样能得到结果:"aaa"
内容的提问来源于stack exchange,提问作者tres.14159
相关产品推荐
相关产品推荐

