Как одной командой извлечь какое-то значение из diff-полей объекта

есть данные 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"

как получить все значения таблицы одной командой?


person zhuguowei    schedule 06.08.2018    source источник


Ответы (2)


Используйте запятую.

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

or

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

Или предположим, что вы хотите получить любое свойство объекта data.

$ jq '.data[][].table' foo.json
person Jeff Mercado    schedule 06.08.2018

Если вам все равно, где встречаются значения «таблицы», и если вы хотите исключить значения null и false:

.. | .table? // empty

Если вы хотите включить значения null и false:

.. | objects | has("table") | .table
person peak    schedule 06.08.2018