Я хочу объединить два атрибута в одну строку, разделенную разделителем, с помощью json_query в доступе
Примеры данных
{
"locations": [
{"name": "Seattle", "state": "WA"},
{"name": "New York", "state": "NY"},
{"name": "Bellevue", "state": "WA"},
{"name": "Olympia", "state": "WA"}
]
}
Как показано в приведенном выше наборе данных, я пытаюсь отфильтровать состояние WA, и выполненный вывод:
[
"Seattle-WA",
"Bellevue-WA",
"Olympia-WA"
]
Что я пробовал на данный момент:
- debug:
msg: "{{ chart_list.HELM_CHARTS | json_query(\"[?state == 'WA'].{name:name,state:state}\") }}"
Output:
[
{
"name": "Seattle",
"state": "WA"
},
{
"name": "Bellevue",
"state": "WA"
},
{
"name": "Olympia",
"state": "WA"
}
]
Обновлено: мне удалось получить ожидаемый результат методом проб и ошибок, и вот мои выводы:
[?state == 'WA'].[join('-',[name,state])][]
Output:
[
"Seattle-WA",
"Bellevue-WA",
"Olympia-WA"
]
Также, если вводимые вами данные находятся в формате Unicode, я предлагаю вам добавить to_json | from_json
выражений, как указано ниже:
selected_cities: "{{ test.locations| to_json | from_json | json_query(\"[?state == 'WA'].[join('-',[name,state])][]\") }}"
Использование приведенного выше выражения устранит ошибку Unicode при использовании значений или в любых условиях. Посетите сайт JMESPath для получения более подробной информации о json_query, это действительно помогло решить проблему.
json_query
воле вопрошающего, но я не понимаю одержимости этим. В Jinja2 естьfor
петли с удобнымselectattr
фильтром, и они отлично работают. - person mdaniel   schedule 04.03.2021