jq以某种方式输出路径的方法可以读取吗?

时间:2016-10-03 07:32:04

标签: path jq

有没有办法以自己可以阅读的方式制作jq输出路径?

示例输入:

{
    "foo": [{
        "bar": 2,
        "bor": 3
    }]
}

输出“bar”的位置和值,例如:

jq -c 'tostream | select(.[0]|index("bar"))'
[["foo",0,"bar"],2]

有没有办法以jq路径选择格式输出路径,即.foo[0].bar

2 个答案:

答案 0 :(得分:1)

jq 可以读取指定为JSON数组的路径。请参阅getpathsetpathfromstream还以数组格式读取路径。

答案 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;

请注意,这始终将属性名称包含在引号中。它并不是严格要求的,但比试图弄清楚它是否真的需要更容易。