Отчет о каждом (необязательном) подэлементе - PullRequest
0 голосов
/ 29 июня 2018

Хочу разобрать следующее:

{
  "issues": [
    { "id": "1", "fields": { "links": [] } },
    { "id": "2", "fields": { "links": [ { "inlink": { "id": "red" } } ] } },
    { "id": "3", "fields": { "links": [ { "outlink": { "id": "yellow" } } ] } },
    { "id": "4", "fields": { "links": [ { "inlink": { "id": "green" } }, { "outlink": { "id": "blue" } } ] } }
  ]
}

в элементы, представляющие элементы links, один за одним, как здесь (обратите внимание, что id 1 отсутствует и id 4 появляется дважды:

  { "id": "2", "link": { "linktype": "inlink", "id": "red" } },
  { "id": "3", "link": { "linktype": "outlink", "id": "yellow" } },
  { "id": "4", "link": { "linktype": "inlink", "id": "green" } },
  { "id": "4", "link": { "linktype": "outlink", "id": "blue" } }

Следующее jq работает для inlink или outlink отдельно

.issues[] | .id as $id | .fields.links[] | .inlink.id as $lid | {$id,$lid}

дает

{ "id": "2", "lid": "red" }
{ "id": "3", "lid": null }
{ "id": "4", "lid": "green" }
{ "id": "4", "lid": null }

но не могу понять, как отслеживать оба типа одновременно или ввести ключ linktype. Есть идеи?

1 Ответ

0 голосов
/ 29 июня 2018

jq решение:

jq -c '.issues[] | .id as $id
       | .fields.links[] | to_entries[]
       | {"id": $id, "link": {"linktype": .key, "id": .value.id}}' file

Выход:

{"id":"2","link":{"linktype":"inlink","id":"red"}}
{"id":"3","link":{"linktype":"outlink","id":"yellow"}}
{"id":"4","link":{"linktype":"inlink","id":"green"}}
{"id":"4","link":{"linktype":"outlink","id":"blue"}}
...