2016-12-21 1 views
3

Кто-нибудь знает, какой фильтр json-query можно использовать для выбора питания Tigger в образце JSON ниже? JSON - это упрощенная резервная копия для массивного и относительно сложного блога AWS.ansible json-query path для выбора элемента по содержанию

Некоторые предпосылки: Мне было приятно узнать, что Ansible имеет фильтр json-query. Учитывая, что я пытался выбрать элемент из блога AWS JSON, это выглядело так, как будто это было именно то, что мне нужно. Однако я быстро столкнулся с проблемами, потому что объекты AWS имеют теги, и мне нужно было выбирать элементы по тегу. Я пробовал пути выбора, эквивалентные Foods[Tags[(Key='For') & (Value='Tigger')]] и тому подобное, но не смог заставить его работать. Используя автономную библиотеку json-запросов, такую ​​как https://www.npmjs.com/package/json-query, я могу использовать атрибут parent, но, похоже, он не находится в Ansible, совершенно не считая отклонения от основной идеи json-запроса.

Возможно, было бы лучше обойти проблему и использовать селектор jsonpath. jsonpath похож на json-query и является переводом из xpath.

{ "Foods" : 
    [ { "Id": 456 
    , "Tags": 
     [ {"Key":"For", "Value":"Heffalump"} 
     , {"Key":"Purpose", "Value":"Food"} 
     ] 
    } 
    , { "Id": 678 
    , "Tags": 
     [ {"Key":"For", "Value":"Tigger"} 
     , {"Key":"Purpose", "Value":"Food"} 
     ] 
    } 
    , { "Id": 911 
    , "Tags": 
     [ {"Key":"For", "Value":"Roo"} 
     , {"Key":"Purpose", "Value":"Food"} 
     ] 
    } 
    ] 
} 

Большое спасибо!

Ссылки:

Я хотел бы, чтобы пометить это вопрос с json-query, но у него нет точек для этого.

+0

Не могли бы вы указать ожидаемый результат? – techraf

ответ

6

Вам нужен список идентификаторов? Если это так, попробуйте:

- debug: msg="{{ lookup('file','test.json') | from_json | json_query(query) }}" 
    vars: 
    query: "Foods[].{id: Id, for: (Tags[?Key=='For'].Value)[0]} | [?for=='Tigger'].id" 

Сначала постройте простые объекты с необходимыми полями, а затем соедините их с фильтром.

+0

Спасибо! Когда я смотрел, почему ваш ответ работал, я понял, что в json_query-фильтре используется jmespath, а не jsonpath узла или python. Использование правильной ссылки на язык помогает! Большое спасибо! –

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

  • Нет связанных вопросов^_^