如何过滤掉 json_query 中的方括号?
How to filter remove square bracket in json_query?
我有以下 json 文件,我正在尝试过滤该值但得到双方括号,但我想使用 regex_replace 删除第一个方括号,但不知道这是如何工作的..
这个 json 文件存储在名为 config_params 的变量中,我试图从那里过滤..
{
"servers": {
"server_details": [
{
"srv_make": "hp",
"newip_address": "192.168.200.139",
"newhostname": "hostbh1",
"nic_macaddress": {
"nic1-mac1_nic2-mac1": [
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
],
"nic1-mac2_nic2-mac2": [
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
},
"vmotion_ip_address": "10.10.20.36",
"iscsi_ip_address": "192.168.0.36",
}
]
}
}
mac_group_list: "{{ config_params | json_query('servers.server_details[*].nic_macaddress.nic1-mac1_nic2-mac1') }}"
[
[
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
]
我期待如下所示的输出 - 我怎样才能在 json 查询中实现这一点。
[
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
谢谢
您的结果是一个列表列表,您需要第一个元素。您可以简单地请求第一个元素,如下所示:
mac_group_list: >-
{{ inputjson | json_query('servers.server_details[].nic_macaddress."nic1-mac1_nic2-mac1"')[0] }}"
或者您可以使用 flatten
过滤器:
mac_group_list: >-
{{ inputjson | json_query('servers.server_details[].nic_macaddress."nic1-mac1_nic2-mac1"') | flatten }}
您也可以修复您的查询,但如果不查看原始数据的样子就很难回答。
更新
或者您可以像这样编写查询过滤器:
- set_fact:
output: >-
{{
inputjson |
json_query('servers.server_details[].nic_macaddress[]."nic1-mac1_nic2-mac1"[]')
}}
为了便于阅读,我重新设置了它的格式,但实际上这正是您现在所拥有的,最后多了一个 []
。鉴于您的示例数据——已修复以满足我在对您的问题的评论中描述的假设——这会产生:
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
"output": [
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
}
我有以下 json 文件,我正在尝试过滤该值但得到双方括号,但我想使用 regex_replace 删除第一个方括号,但不知道这是如何工作的.. 这个 json 文件存储在名为 config_params 的变量中,我试图从那里过滤..
{
"servers": {
"server_details": [
{
"srv_make": "hp",
"newip_address": "192.168.200.139",
"newhostname": "hostbh1",
"nic_macaddress": {
"nic1-mac1_nic2-mac1": [
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
],
"nic1-mac2_nic2-mac2": [
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
},
"vmotion_ip_address": "10.10.20.36",
"iscsi_ip_address": "192.168.0.36",
}
]
}
}
mac_group_list: "{{ config_params | json_query('servers.server_details[*].nic_macaddress.nic1-mac1_nic2-mac1') }}"
[
[
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
]
我期待如下所示的输出 - 我怎样才能在 json 查询中实现这一点。
[
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
谢谢
您的结果是一个列表列表,您需要第一个元素。您可以简单地请求第一个元素,如下所示:
mac_group_list: >-
{{ inputjson | json_query('servers.server_details[].nic_macaddress."nic1-mac1_nic2-mac1"')[0] }}"
或者您可以使用 flatten
过滤器:
mac_group_list: >-
{{ inputjson | json_query('servers.server_details[].nic_macaddress."nic1-mac1_nic2-mac1"') | flatten }}
您也可以修复您的查询,但如果不查看原始数据的样子就很难回答。
更新
或者您可以像这样编写查询过滤器:
- set_fact:
output: >-
{{
inputjson |
json_query('servers.server_details[].nic_macaddress[]."nic1-mac1_nic2-mac1"[]')
}}
为了便于阅读,我重新设置了它的格式,但实际上这正是您现在所拥有的,最后多了一个 []
。鉴于您的示例数据——已修复以满足我在对您的问题的评论中描述的假设——这会产生:
TASK [debug] *********************************************************************************************************************************************************************************
ok: [localhost] => {
"output": [
"b8:83:03:81:4b:20",
"b8:83:03:84:d5:1c"
]
}