我想从json那里得到价值,但关键之一是不同的。
下面是json的例子
{
"json": {
"id": "9758b1e5-442e-4545-9364-45f28477edfb",
"results": [{
"code": 200,
"host": "localhost",
"message": "no change",
"runTime": 1233,
"tenant": "http-validate-2.usa-dc.com"
}],
"traces": {
"http-validate-2.usa-dc.comCurrent": {
"/Common/10.10.100.10": {
"command": "ltm node"
},
"http-validate-2.usa-dc.comDiff": [{
"command": "ltm virtual",
"kind": "D",
"lhs": {
"default": "yes"
},
"lhsCommand": "ltm virtual",
"path": [
"/http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80",
"properties",
"persist",
"/Common/cookie"
],
"rhsCommand": "ltm virtual",
"tags": [
"tmsh"
]
}]
}
}
}}
我的游戏手册
tasks:
- name : deploy json file AS3 to F5
debug:
msg: "{{ lookup('file', 'parse.json') }}"
register: atc_AS3_status
- name: debug
debug:
msg: "{{ atc_AS3_status.msg.json['traces']['.*Diff']}}"我想要到达键"path“,但是上面的键”http-验证-2. can dc.comDiff“可能与”http-有效性-3.can-dc.comDiff“不同,但始终以Diff结尾。
发布于 2021-10-22 23:08:55
使用json_query,例如。
- debug:
msg: "{{ json.traces|json_query('*.*[][].path') }}"应该给出路径的列表(可能有更多的路径)
msg:
- - /http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80
- properties
- persist
- /Common/cookie问:"I只需要以Diff."结尾的路径
答:JMESPath无法搜索关键通配符AFAIK。相反,使用select并创建与regex匹配的嵌套键列表。
- debug:
msg: "{{ json.traces|json_query('*.keys(@)')|flatten|
select('match', '^.*Diff$')|list }}"给出
msg:
- http-validate-2.usa-dc.comDiff然后迭代这个列表,选择路径并连接列表路径。
- set_fact:
paths: "{{ paths|d([]) + json.traces|json_query(query) }}"
loop: "{{ json.traces|json_query('*.keys(@)')|flatten|
select('match', '^.*Diff$')|list }}"
vars:
query: '*."{{ item }}"[].path'给出匹配正则表达式的键的路径列表。
paths:
- - /http-validate-2.usa-dc.com/app/vs_http-validate-2.usa-dc.com_80
- properties
- persist
- /Common/cookiehttps://stackoverflow.com/questions/69683743
复制相似问题