2015-05-04 3 views
3

Я извлекая некоторую информацию из моих JSon файлов, которые отформатированы, как это:Использование JQ извлечь определенную информацию из JSON файла

{ 
    "name": "value", 
    "website": "https://google.com", 
    "type" : "money", 
    "some": "0", 
    "something_else": "0", 
    "something_new": "0", 
    "test": [ 
     {"Web" : "target1.com", "type" : "2" }, 
     {"Web" : "target2.com", "type" : "3" }, 
     {"Web" : "target3.com", "type" : "3" }, 
     {"Web" : "target3.com", "type" : "3" } 
    ] 
} 

Я знаю, что jq -r .test[].Web Выведет:

target1.com 
target2.com 
target3.com 

но что, если я хочу только получить значения с типом 3, то вывод будет отображаться только target2.com и target3.com.

+0

Проверьте свои данные еще раз, что вы просите, не имеет смысла с этим. Каждый из «тестовых» предметов имеет разные имена. Как мы должны знать, какое имя ожидать и для какого типа? У этого нет никакого шаблона. –

+0

ahhh Я допустил ошибку! Я исправил данные. Я хочу получить jq -r .test []. Веб, но только те, которые имеют тип 3. – user3610137

ответ

5
$ jq -r '.test[] | select(.type == "3").Web' file.json 
target2.com 
target3.com 
target3.com 

Проходит .test[] узлами до select, который фильтрует его вход, используя селектор .type == "3". Затем он выбирает .Web из отфильтрованного списка.

+0

Предпочитаете стиль '.test | map (выберите (.type == "3") | .Web) | . [] ', не расширяя массив до самого последнего шага. –