根据jq

时间:2018-03-06 23:29:14

标签: json jq

我们说我有以下结构:

{
"data": [
    {
        "wrapper_1": {
            "attr1": "val1",
            "attr2": "val2",
            "attr3": true
        }
    },
    {
        "wrapper_2": {
            "attr1": "val1",
            "attr2": "val2",
            "attr3": false
        }
    },
    {
        "wrapper_3": {
            "attr1": "val1",
            "attr2": "val2",
            "attr3": false
        }
    },
    ...
]

}

正如你所看到的,我有一个数组,由于某种原因,它有一组具有不同"标题的对象" (包装器),但其内部结构由存在于该数组中的所有元素共享。 我attr3只有一个真正的元素,而data的其余元素在该元素上会有false值。

鉴于条件(attr3 == true),我需要过滤该元素并获得attr2的值。我是jq的初学者,我试过这个没有运气:

jq '.path.to.data[] | select(.attr3 == true)'

我正在阅读mapselect的组合,但我无法弄明白。此外,我知道上面的代码段不起作用,因为它假设data的元素是同质的,而事实并非如此。

对此有任何建议将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用您的数据,过滤器:

.data[][] | select(.attr3) | .attr2

产生

"val2"