jq:如何从相同类型的列表中检索元素?

我有一个像这样的json:

{
    "datasets": [
        {
            "features": [
                {
                    "name": "aaa","stringStats": {
                        [...]
                        },"type": "STRING",},{
                    "name": "bbb","numStats": {
                        [...]
                        },"type": "FLOAT",{
                    "name": "ccc","stringStats": {
                        [...]
                },}
            ]
        }
    ]
}

我想从所有“ stringStats”列表中检索[...]中的所有元素。

我成功通过jq查询检索了所有元素,但是我不知道如何从特定种类的列表中进行过滤和迭代。

zuijian168 回答:jq:如何从相同类型的列表中检索元素?

如果您需要数组格式,请使用以下内容,

[.datasets[].features[].stringStats // empty ]

如果需要作为对象,请使用以下内容,

.datasets[].features[].stringStats // empty

https://jqplay.org/s/-sZ7tvU4Yb

,

这是使用recursive descent ..optional object identifier .?values

的方法
.. | .stringStats? | values
,

您可以映射到数组的所有值进行迭代,然后执行所需的操作。

我的示例数据

[
  {        "v": "1","t": "i"      },{        "v": "a","t": "s"      },{        "v": "1.1","t": "f"      },{        "v": "b",{        "v": "2","t": "i"      }
]

仅在t = "i"

时才提取的示例
e444$ cat e.json | jq 'map(.| if .t == "i" then . else empty end )'
[
  {
    "v": "1","t": "i"
  },{
    "v": "2","t": "i"
  }
]

仅在t = "s"

时才提取的示例
e444$ cat e.json | jq 'map(.| if .t == "s" then . else empty end )'
[
  {
    "v": "a","t": "s"
  },{
    "v": "b","t": "s"
  }
]
本文链接:https://www.f2er.com/3158582.html

大家都在问