我有以下 output3.msg,如何獲得下面提到的所需輸出?請在語法方面提供幫助,檢查我的語法并提出任何修改建議。我正處于學習階段,對任何錯誤表示歉意,謝謝。
輸出3.msg
{
“味精”:[
{
“自動鍵”:{
“proxy_id”:{
“入口”: [
{
“本地”:“1.1.1.0/24”,
"name": "PROXY1",
“協議”: {
“任何”:空
},
“遠程”:“192.168.0.0/24”
},
{
“本地”:“1.1.2.0/24”,
"name": "PROXY2",
“協議”: {
“任何”:空
},
“遠程”:“192.168.1.0/24”
},
{
“本地”:“1.1.3.0/24”,
"name": "PROXY3",
“協議”: {
“任何”:空
},
“遠程”:“192.168.2.0/24”
}
]
}
},
"copy_tos": "是的",
"name": "客戶-a",
"tunnel_interface": "tunnel.5",
“隧道監視器”:{
“啟用”:“否”
}
},
{
“自動鍵”:{
“proxy_id”:{
“入口”: [
{
“本地”:“2.2.1.0/24”,
"name": "PROXY1",
“協議”: {
“任何”:空
},
“遠程”:“192.168.3.0/24”
}
]
}
},
"copy_tos": "是的",
"name": "customer-b",
"tunnel_interface": "tunnel.10",
“隧道監視器”:{
“啟用”:“否”
}
},
{
“自動鍵”:{
“proxy_id”:{
“入口”: [
{
“本地”:“3.3.1.0/24”,
"name": "PROXY1",
“協議”: {
“任何”:空
},
“遠程”:“192.168.4.0/24”
},
{
“本地”:“3.3.2.0/24”,
"name": "PROXY2",
“協議”: {
“任何”:空
},
“遠程”:“192.168.5.0/24”
},
{
“本地”:“3.3.3.0/24”,
"name": "PROXY3",
“協議”: {
“任何”:空
},
“遠程”:“192.168.6.0/24”
},
{
“本地”:“3.3.4.0/24”,
"name": "PROXY2",
“協議”: {
“任何”:空
},
“遠程”:“192.168.7.0/24”
},
{
“本地”:“3.3.5.0/24”,
"name": "PROXY3",
“協議”: {
“任何”:空
},
“遠程”:“192.168.8.0/24”
}
]
}
},
"copy_tos": "是的",
"name": "customer-c",
"tunnel_interface": "tunnel.15",
“隧道監視器”:{
“啟用”:“否”
}
}
]
}
期望的輸出
{
名稱:客戶-a,
本地:1.1.1.0/24,1.1.2.0/24,1.1.3.0/24,
遠程:192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,
隧道:tunnel.5
},
{
名稱:customer-b,
本地:2.2.1.0/24,
遠程:192.168.3.0/24,
隧道:tunnel.10
},
{
名稱:customer-c,
本地:3.3.1.0/24,3.3.2.0/24,3.3.3.0/24,3.3.4.0/24,3.3.5.0/24
遠程:192.168.4.0/24,192.168.5.0/24,192.168.6.0/24,192.168.7.0/24,192.168.8.0/24,
隧道介面:tunnel.15
}
我的除錯語法
- 除錯:msg="{{output3.msg|json_query(jmesquery)}}"
變數:
jmesquery: "[*].{Name: name, local: proxy_id.entry.local,remote: proxy_id.entry.remote,tunnel:tunnel_interface}"
我得到的輸出
“味精”:[
{
"姓名": "客戶-a",
“本地”:空,
“遠程”:空,
“隧道”:“tunnel.5”
},
{
"姓名": "客戶-b",
“本地”:空,
“遠程”:空,
“隧道”:“tunnel.10”
},
{
"Name": "customer-c",
“本地”:空,
“遠程”:空,
“隧道”:“tunnel.15”
}]
uj5u.com熱心網友回復:
您看到nullvalues的原因是因為它proxy_id.entry是一個陣列,并且它下面沒有local/remote鍵。正確的語法類似于proxy_id.entry[].local.
使用auto_key.proxy_id.entry[]語法 injson_query產生了所需的輸出。下面是任務:
- name: show jsondata
debug:
var: output3.msg | json_query(jquery)
vars:
jquery: "[].{Name: name, local: auto_key.proxy_id.entry[].local | join(',', @), remote: auto_key.proxy_id.entry[].remote | join(',', @), tunnel: tunnel_interface}"
請注意,我已使用join()函式為localand獲取逗號分隔的字串remote。下面是輸出:
ok: [localhost] => {
"output3.msg | json_query(jquery)": [
{
"Name": "customer-a",
"local": "1.1.1.0/24,1.1.2.0/24,1.1.3.0/24",
"remote": "192.168.0.0/24,192.168.1.0/24,192.168.2.0/24",
"tunnel": "tunnel.5"
},
{
"Name": "customer-b",
"local": "2.2.1.0/24",
"remote": "192.168.3.0/24",
"tunnel": "tunnel.10"
},
{
"Name": "customer-c",
"local": "3.3.1.0/24,3.3.2.0/24,3.3.3.0/24,3.3.4.0/24,3.3.5.0/24",
"remote": "192.168.4.0/24,192.168.5.0/24,192.168.6.0/24,192.168.7.0/24,192.168.8.0/24",
"tunnel": "tunnel.15"
}
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364376.html
標籤:json 解析 能听懂的 ansible-模板 json查询
上一篇:如何使用Java決議TOML檔案
