【发布时间】:2021-03-03 22:41:56
【问题描述】:
我想使用 ansible 中的 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过滤器,它们工作得很好。 -
嗨@mdaniel,我想要它在 json_query 中的原因是根据条件从庞大的数据集中快速访问所需的数据。我同意循环可以工作,但我对这个插件有点熟悉:-)
标签: ansible jmespath json-query