如何在一个命令中从对象的差异字段中提取一些值

时间:2018-08-06 14:20:33

标签: json jq json-query

有这样的json数据

➜  ~ cat foo.json | jq
{
  "data": {
    "foo": [
      {
        "table": "aaa"
      },
      {
        "table": "bbb"
      }
    ],
    "bar": [
      {
        "table": "ccc"
      },
      {
        "table": "ddd"
      }
    ]
  }
}

可以分别获取foo或bar表,

➜  ~ cat foo.json | jq '.data.foo[].table'
"aaa"
"bbb"
➜  ~ cat foo.json | jq '.data.bar[].table'
"ccc"
"ddd"

如何在一个命令中获得所有表值?

2 个答案:

答案 0 :(得分:1)

使用逗号运算符。

$ jq '.data["foo", "bar"][].table' foo.json

$ jq '.data | .foo, .bar | .[].table' foo.json

或者假设您想获取data对象的任何属性。

$ jq '.data[][].table' foo.json

答案 1 :(得分:0)

如果您不关心“表”值在哪里出现,并且要排除nullfalse值:

.. | .table? // empty

如果要包含nullfalse值:

.. | objects | has("table") | .table