выделить объект по значению вложенного поля и извлечь поле первого уровня - PullRequest
1 голос
/ 16 марта 2020

У меня есть следующее json:

[
  {
    "uuid": "rvbrc7y6a5d6xpz37av534zv3a",
    "templateUuid": "101",
    "trashed": "N",
    "createdAt": "2018-07-26T05:48:51Z",
    "updatedAt": "2018-07-27T00:26:35Z",
    "changerUuid": "Y7WX2RXJ35GCLLERQA2T74CKNM",
    "itemVersion": 3,
    "vaultUuid": "awn3jry3oo55xdcfgs7bnlyioa",
    "overview": {
      "ps": 0,
      "title": "Env Vars - CSP 1"
    }
  },
  {
    "uuid": "xtf3vdsnw5ardldytwh6edihzu",
    "templateUuid": "001",
    "trashed": "N",
    "createdAt": "2013-10-15T01:29:57Z",
    "updatedAt": "2016-11-22T20:57:47Z",
    "changerUuid": "Y7WX2RXJ35GCLLERQA2T74CKNM",
    "itemVersion": 1,
    "vaultUuid": "qmorozyspqhb26kr4z7nbt7hpy",
    "overview": {
      "URLs": [
        {
          "u": "https://example.com"
        }
      ],
      "ainfo": "*******@gmail.com",
      "ps": 72,
      "title": "https://example.com",
      "url": "https://example.com"
    }
  }
]

В массиве есть еще ~ 500 объектов, которые мне нужно проанализировать. Три из объектов имеют .overview.title, который содержит строку "Env Vars".

Я пытаюсь использовать jq, чтобы вывод был похож:

"rvbrc7y6a5d6xpz37av534zv3a", "Env Vars - CSP 1"
"another uuid", "Env Vars - CSP 2"
"yet another uuid", "Env vars - CSP n"

Я пытался несколько разных вещей, в том числе:

  • cat list.json | jq -c '.[] | .uuid, .overview.title'

  • cat list.json | jq -c '.[].overview.title | select(contains("Env Var"))'

А много разных вариаций вышеперечисленного. Это первый раз, когда мне пришлось использовать jq в гневе, так что это довольно ново для меня. jq Доку не очень помогло.

Хотел бы купить подсказку, пожалуйста.

1 Ответ

1 голос
/ 16 марта 2020

Выберите объекты, в которых .overview.title содержит Env Vars, извлеките из них .uuid, создайте массивы из пар UUID и заголовков и передайте их в фильтр @csv.

.[]
| .overview.title as $t 
| select($t | index("Env Vars")) 
| [.uuid, $t]
| @csv

Обратите внимание, что вам нужно указать -r / --raw-output флаг в командной строке для jq, чтобы получить действительный CSV.

...