有没有办法以自己可以阅读的方式制作jq
输出路径?
示例输入:
{
"foo": [{
"bar": 2,
"bor": 3
}]
}
输出“bar”的位置和值,例如:
jq -c 'tostream | select(.[0]|index("bar"))'
[["foo",0,"bar"],2]
有没有办法以jq
路径选择格式输出路径,即.foo[0].bar
?
答案 0 :(得分:1)
jq 可以读取指定为JSON数组的路径。请参阅getpath
和setpath
。 fromstream
还以数组格式读取路径。
答案 1 :(得分:0)
据我所知,没有内置的方法可以做到这一点,但推出一个实现并不需要太多。
只有三种情况需要担心:当路径为空时,路径包含一个字符串,路径包含一个数字。
如果它是空的,它只是指输入本身。如果它是一个字符串,它是一个对象的属性。如果它是一个数字,它就是数组的索引。
所以你可以使用它:
def to_expression($path): $path |
if length == 0
then "."
else map(
if type == "string"
then ".\"\(.)\""
elif type == "number"
then "[\(.)]"
else
error("unexpected path type: \(type)")
end
) | add
end;
请注意,这始终将属性名称包含在引号中。它并不是严格要求的,但比试图弄清楚它是否真的需要更容易。