带有包含的json格式查询 [英] json format query with contains

查看:33
本文介绍了带有包含的json格式查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在ansible中有以下json输出:

I have the following json output in ansible:

[{
    "active_transaction": null,
    "cores": 4,
    "hostname": "alpha-auth-wb01"
},
{
    "active_transaction": null,
    "cores": 4,
    "hostname": "beta-auth-wb01"
}]

现在我正在尝试过滤输出以仅显示主机名包含 alpha 的输出.

Now I am trying to filter the output to just show the output where the hostname contains alpha for example.

输出应该是:

[{
    "active_transaction": null,
    "cores": 4,
    "hostname": "alpha-auth-wb01"
}]

代码和结果:

Ansible 代码

jq: "[?contains(hostname, 'alpha')]"


fatal: [worker.domain]: FAILED! => {"msg": "JMESPathError in json_query filter plugin:\\nIn function contains(), invalid type for value: None, expected one of: ['array', 'string'], received: \\"null\\""}

还尝试添加 from_json |to_json 反之亦然.还是失败了.

Also tried adding from_json | to_json and the other way around. Still fails.

任何想法都非常感谢!

推荐答案

正如@Matthew L Daniel 提到的,由于引用问题,您应该将查询存储在变量中.您的查询也是不正确的,对于您想要的.据我了解,您希望选择所有元素,其中 hostname 包含字符串 alpha.一个完全有效的解决方案如下:

As @Matthew L Daniel mentioned, you should store your query in a variable, because of quoting issues. Also your query is incorrect, for what you want. As I understood, you would like to select all elements, where the hostname contains the string alpha. A fully working solution is the following:

---
- hosts: localhost
  gather_facts: False

  vars:
    jq: "[?contains(hostname, 'alpha')]"
    json: |
      [{
          "active_transaction": null,
          "cores": 4,
          "hostname": "alpha-auth-wb01"
      },
      {
          "active_transaction": null,
          "cores": 4,
          "hostname": "beta-auth-wb01"
      }]

  tasks:
  - name: DEBUG
    debug:
      msg: "{{ json | from_json | json_query(jq) }}"

如果您不想在 var 中编写 json_query,您可以像这样引用它:

If you don't want to write your json_query in a var you could quote it like this:

"{{ json | json_query(\"[?contains(hostname, 'alpha')]\") }}"

但我建议将其放入 var 中.

But I would recommend, to put it in a var.

这篇关于带有包含的json格式查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆