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

How to extract some value from diff fields of an object in one command

有json这样的数据

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

可以分别得到 foo 或 bar 的 table,

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

如何在一条命令中获取所有 table 值?

使用逗号运算符。

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

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

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

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

如果您不关心 "table" 值出现在哪里,并且如果您想排除 nullfalse 值:

.. | .table? // empty

如果您想包含 nullfalse 值:

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