Извлечь все значения для указанного c повторного ввода в JSON - PullRequest
1 голос
/ 01 апреля 2020

У меня есть огромный json файл около 4500 строк. Я sh, чтобы извлечь значение всех ключей с именем "значение". Уровни путей json не одинаковы.

JSON Пример:

{
k1:v1,
k2:v2,
k3:v3,
k4:{
     k5:v5,
     k6:{
          k7:v7,
          value:"value1"
        }
   }
k8:v8,
value:"value2"
}

Существует несколько таких тегов "value".

Есть ли способ использовать jq для получения всех значений?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Использование рекурсивный спуск .

.. | objects | if has("value") then .value else empty end
0 голосов
/ 08 апреля 2020

Вот несколько более короткий вариант ответа oguz ismail , в котором используется необязательный идентификатор объекта .foo? и альтернативный оператор // вместе с рекурсивным спуском.

.. | .value? // empty

Пример вывода (с использованием исправленного JSON Sample)

"value2"
"value1"

Обратите внимание, что этот ярлык не будет выдавать тот же вывод, если клавиша "value" может быть нулевой, как // не может различить guish между null "значением" и null, создаваемым оператором ?, когда клавиша "значения" отсутствует. Это проблема, тогда лучше проверить наличие клавиши «value» с has.

Попробуйте онлайн!

...