2016-09-30 4 views
3

У меня есть файл, который выглядит, как показано ниже:Использование JQ для извлечения ключа из вывода JSon

{ 
    "repositories": [ 
    { 
    "id": "156c48fc-f208-43e8-a631-4d12deb89fa4", 
    "namespace": "rhel12", 
    "namespaceType": "organization", 
    "name": "rhel6.6", 
    "shortDescription": "", 
    "visibility": "public" 
    }, 
    { 
    "id": "f359b5d2-cb3a-4bb3-8aff-d879d51f1a04", 
    "namespace": "rhel12", 
    "namespaceType": "organization", 
    "name": "rhel7", 
    "shortDescription": "", 
    "visibility": "public" 
    } 
    ] 
} 

Я хочу, чтобы получить только значения имен с каждым из них в новой строке, так что я могу использовать while read -r line. мне нужно только

rhel6.6 
rhel7 

Я использую JQ так что не похоже на работу:

jq -r '.[].name' 

Просьба предложить правильное использование JQ здесь

ответ

4

Вам нужно комбинировать фильтры с помощью из | оператора:

$ jq -r '.[] | .[] | .name' test.json 
rhel6.6 
rhel7 

Первый .[] выборки repositories массив. Следующий .[] извлекает все элементы массива repositories. Наконец, .name извлекает свойства из элементов массива (объектов).

Обратите внимание, первые .[] работы на объекте, потому что это документированная особенность:

.[] 
    If you use the .[index] syntax, but omit the index entirely, it 
    will return all of the elements of an array... 

    You can also use this on an object, and it will return all the 
    values of the object. 
+0

спасибо за ваш ответ. Как вы можете получить вывод в формате 'rhel12/rhel6.6' Другими словами, мне нужно о/р в формате' namespace/name' – meallhour

+0

@meallhour, 'jq -r '. [] | . [] | [.namespace, .name] | join ("/") 'test.json' –

6

Вы хотите посмотреть на массив репозиториях вместо обработки ввода в виде массива:

$ jq -r '.repositories[].name' file 
rhel6.6 
rhel7 
+0

спасибо за ваш ответ. Можете ли вы, как я могу получить вывод в формате 'rhel12/rhel6.6' Другими словами, мне нужно o/p в формате' namespace/name' – meallhour

+2

. Пожалуйста, задавайте новые вопросы отдельно. –

0

Вот еще одно решение. Предполагая, что требования:

Я хочу получить только значения имен с каждой из них в новой строке, чтобы я мог использовать их во время чтения строки -r.

Вы можете, пожалуйста, как я могу получить выход в формате rhel12/rhel6.6 Другими словами, мне нужно о/р в формате имен/имя

, если данные в data.json тогда команда

jq -M -r '.repositories[] | "\(.namespace)/\(.name)"' data.json 

должен производить

rhel12/rhel6.6 
rhel12/rhel7 
Смежные вопросы