Извлечение Json свойств из массива по значению и преобразование в новую json структуру с помощью jq - PullRequest
0 голосов
/ 06 марта 2020

мой ввод json выглядит следующим образом:

[{
   "methodResponse":{
      "params":{
         "param":{
            "value":{
               "struct":{
                  "member":[
                     {
                        "name":"severity",
                        "value":{
                           "string":"Low"
                        }
                     },
                     {
                        "name":"product",
                        "value":{
                           "string":"p1"
                        }
                     }                        
                  ]
               }
            }
         }
      }
   }
}]

Я хочу извлечь каждую запись "члена" в новый объект json путем фильтрации по значению "name".

Вывод должен выглядеть следующим образом:

[
  {
    "severity": "Low",
    "product": "p1"
  }
]

Порядок элементов-членов может измениться.

Я могу выбрать значения по значению «имя», но это не работает, если упорядочен порядок элементов.

[.[].methodResponse.params.param.value.struct.member[] | select(.name == "severity").value.string, select(.name == "product").value.string] | [{severity:.[0], product:.[1]}]

Другая проблема заключается в том, что член не был найден по значению имени. если член не найден по имени, он должен напечатать ноль для значения отсутствующего члена-> «missingmemberName»: null

  [
      {
        "severity": "Low",
        "product": "p1",
        "missingmemberName": null
      }
    ]

https://jqplay.org/s/CthSsOCQ-Y

Спасибо за любая помощь

1 Ответ

0 голосов
/ 06 марта 2020

Решение первой части вопроса, насколько я понимаю, может быть решено с помощью from_entries:

.[].methodResponse.params.param.value.struct.member
| map( .value |= .string )
| [from_entries]

Если вы хотите выбрать конкретный продукт или продукты, было бы легко измените вышесказанное.

Вторая часть вопроса не слишком понятна для меня, но я думаю, что как только вы поймете from_entries, вы сможете найти решение довольно легко.

...