Создание уникальных массивов из значений вложенного массива с общими родителями

Вероятно, близкий вопрос к JQ: вложенное преобразование JSON, но я не смог понять вокруг него.

Пример JSON:

"value": [
{
  "FeatureStatus": [
    {
      "FeatureName": "Sway1",
      "FeatureServiceStatus": "ServiceOperational"
    },
    {
      "FeatureName": "Sway2",
      "FeatureServiceStatus": "ServiceDegraded"
    }
  ],
  "Id": "SwayEnterprise",
},
{
  "FeatureStatus": [
    {
      "FeatureName": "yammerfeatures",
      "FeatureServiceStatus": "ServiceOperational"
    }
  ],
  "Id": "yammer"
}
]

Что я хочу сделать, так это создать вывод с помощью jq, что приведет к следующему:

{"Sway":"Sway1":"ServiceOperational"},
{"Sway":"Sway2":"ServiceDegraded"},
{"Yammer":"yammerfeatures":"ServiceOperational"}

Мои различные попытки заканчиваются либо тысячами неуникальных (например, Yammer со статусом Sway), либо только одним идентификатором с x номером FeatureServiceStatus.

Любые указатели будут очень признательны. Я прошел через учебник и поваренную книгу. Я, возможно, 2,5 дня использую jq.


person Shane A.    schedule 12.06.2017    source источник
comment
1. Пожалуйста, исправьте ввод, чтобы он, как вы говорите, был действительным JSON. 2. Вы действительно хотите получить недопустимый JSON в качестве вывода? 3. Уточните взаимосвязь между входными данными и выходными элементами верхнего уровня Sway и Yammer.   -  person peak    schedule 12.06.2017


Ответы (1)


Предполагая, что закрывающие фигурные скобки были добавлены, чтобы сделать ввод действительным JSON, фильтр:

.value[]
| [.Id] + (.FeatureStatus[] | [ .FeatureName, .FeatureServiceStatus ])

производит:

["SwayEnterprise","Sway1","ServiceOperational"]
["SwayEnterprise","Sway2","ServiceDegraded"]
["yammer","yammerfeatures","ServiceOperational"]

Затем вы можете легко переформатировать это по желанию.

person peak    schedule 12.06.2017
comment
Плохо, но да, JSON действителен с моей стороны (просто поленился скопировать + вставить сюда). Ваше решение идеально, и теперь, когда я вижу его написанным, я понимаю, как jq его строит. Спасибо :) - person Shane A.; 13.06.2017