我有麻烦了。
当我尝试在中使用json_query过滤器时,返回以下错误:
{"msg":“jmespath.search中的json_query过滤器插件中的错误:\n带基10:‘-’}的int()的无效文字
我用replace ('-','_')过滤器解决了这个问题。
,我有别的办法解决这个问题吗?
在这里完成代码:
---
# tasks file for mpls-lsp
- name: Colete informações do protocolo osfp
junipernetworks.junos.junos_rpc:
rpc: get-ospf-neighbor-information
output: json
register:
_data
- name: Aplica as configurações padrão em RT-BRAS.*
ansible.builtin.debug:
var: item
loop: "{{ _data2 | json_query('ospf_neighbor_information[0].ospf_neighbor[*].neighbor_address[0].data') }}"
vars:
_data2: "{{ _data.output | replace ('-','_') }}"
when: "'device_roles_bras' in {{ group_names }}"发布于 2021-07-22 16:47:37
TL;DR
"ospf-neighbor-information"[0]."ospf-neighbor"[*]."neighbor-address"[0].data
完整的故事
我用
replace ('-','_')过滤器解决了这个问题。
这实际上是相当危险的,因为这代替了下划线在输入、标识符和值中的任何位置。但是如果我们现在看一下您得到的jmespath表达式
json_query('ospf_neighbor_information[0].ospf_neighbor[*].neighbor_address[0].data')
我们可以推断,以前使用-作为分隔符的所有标识符
在上面的表达式中,您使用的是未引用的标识符。如果您查看标识符的jmespath规范,您将看到未引用的代码不能包含破折号。
标识符=未引用-字符串/引文-字符串未引用-string= (%x41-5A / %x61-7A / %x5F) *(;A_ %x30-39 /;0-9 %x41-5A /;A %x5F /;_ %x61-7A);a-z引号-string=引用1*(未转义-char/转义-char)引用未转义-char= %x20-21 / %x23-5B / %x5D-10FFFF转义= %x5C;反斜杠:\= %x22;双引号:‘’转义-char=转义( %x22 /;“引号U+0022 %x5C /;\反向solidus U+005C %x2F /;/ solidus U+002F %x62 /;b backspace U+0008 %x66 /;F格式U+000C %x6E /;n行U+000A %x72 /;r回车返回U+000D %x74 /;t制表符U+0009 %x75 4 4HEXDIG );uXXXX U+XXXX
因此,如果标识符包含破折号,则必须引用它们(并请注意,引用标识符是用双引号生成的)。
您可以按照下面的方式转换您的json_query任务,以使其在原始数据上工作(您可能不得不适应,因为我没有您的原始结构,必须猜测一下.)
- name: Aplica as configurações padrão em RT-BRAS.*
ansible.builtin.debug:
var: item
loop: "{{ _data.output | json_query(query) }}"
vars:
query: >-
"ospf-neighbor-information"[0]."ospf-neighbor"[*]."neighbor-address"[0].data
when: "'device_roles_bras' in {{ group_names }}"https://stackoverflow.com/questions/68487920
复制相似问题