Фильтрация json при помощи jq

Дано:
Файл json с какими-то данными. Например:
  1. [{
  2.   "name": "Company 1",
  3.   "products": [
  4.     {"id": 123,
  5.      "name": "Product 1"},
  6.     {"id": 124,
  7.      "name": "Product 2"}
  8.   ]
  9. },{
  10.   "name": "Company 2",
  11.   "products": [
  12.     {"id": 323,
  13.      "name": "Product 11"},
  14.     {"id": 324,
  15.      "name": "Product 22"}
  16.   ]
  17. }]
Требуется:
Быстро выполнить какое-нибудь преобразование или фильтрацию. Например, вытащить наименования продуктов.
Независимо от компании:
  1. [.[] | .products[].name | strings | select(length > 0)]
  1. ["Product 1",
  2.  "Product 2",
  3.  "Product 11",
  4.  "Product 22"]
В зависимости от компании:
  1. [.[] | {company: .name, "product-names": [.products[].name]}]
  1. [{
  2.   "company": "Company 1",
  3.   "product-names": [
  4.     "Product 1",
  5.     "Product 2"
  6.   ]
  7. }, {
  8.   "company": "Company 2",
  9.   "product-names": [
  10.     "Product 11",
  11.     "Product 22"
  12.   ]
  13. }]
Затем выполняем:
  1. cat in.json | jq '<query>' > out.json

Поиграться можно здесь: https://jqplay.org/

Реклама

Мы в соцсетях

tw tg yt gt