2015-06-10 3 views
1

Мой босс хочет, чтобы наша команда использовала JQ для разбора файлов JSON. Приложение, которое я использую, создает JSON, который мне нужно преобразовать. У меня есть файл, который выглядит следующим образом:Несколько фильтров с использованием JQ

{ 
    "Collections": [ 
     { 
      "OptionGroups": [ 
       { 
        "OptionGroupName": "Test1", 
        "Status": "in-sync" 
       } 
      ], 
      "Version": "3.4.25", 
      "InstanceIdentifier": "Dev1" 
     }, 
     { 
      "OptionGroups": [ 
       { 
        "OptionGroupName": "Test2", 
        "Status": "in-sync" 
       } 
      ], 
      "Version": "3.4.22", 
      "InstanceIdentifier": "Dev2" 
     } 
    ] 
} 

Использование JQ, когда я исполню это:

cat json.txt | jq -r '.Collections[].OptionGroups[].OptionGroupName, .Collections[].InstanceIdentifier, .Collections[].Version' 

я получаю этот выход:

Test1 
Test2 
Dev1 
Dev2 
3.4.25 
3.4.22 

Как получить вывод, что внешний вид что-то вроде этого:

Test1 Dev1 3.4.25 
Test2 Dev2 3.4.22 
+0

BTW, никто из нашей команды не знает ответа, поэтому я разместил здесь свой вопрос. – jago

ответ

4

Всегда pr будьте осторожны при использовании фильтров, которые используют несколько [] в одном выражении. Вы можете получить неожиданные результаты, если не будете осторожны.

Я бы применил это как преобразование в CSV (но с использованием другого разделителя, вкладки).

Сначала преобразуйте данные в какие будут ваши ряды.

.Collections[] | { InstanceIdentifier, Version } + (.OptionGroups[] | { OptionGroupName }) 

С помощью этих новых объектов вы можете создавать массивы значений строк и выписывать строку. Вместо передачи массивов в фильтр @csv просто присоедините их к вкладкам.

[ .OptionGroupName, .InstanceIdentifier, .Version ] | join("\t") 
+0

Спасибо, что решил проблему, поэтому я принял ответ. Мы используем jq 1.3, поэтому я не мог использовать «join», но @csv создал вывод, с которым я могу работать. – jago

+0

Можете ли вы опубликовать полную команду, реализующую вышеуказанное решение? –

Смежные вопросы