首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带bug的json_query过滤器?

带bug的json_query过滤器?
EN

Stack Overflow用户
提问于 2021-07-22 15:51:33
回答 1查看 185关注 0票数 0

我有麻烦了。

当我尝试在中使用json_query过滤器时,返回以下错误:

{"msg":“jmespath.search中的json_query过滤器插件中的错误:\n带基10:‘-’}的int()的无效文字

我用replace ('-','_')过滤器解决了这个问题。

,我有别的办法解决这个问题吗?

在这里完成代码:

代码语言:javascript
复制
---
# 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 }}"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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任务,以使其在原始数据上工作(您可能不得不适应,因为我没有您的原始结构,必须猜测一下.)

代码语言:javascript
复制
- 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 }}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68487920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档