json - 当值包含ansible中的字符串时解析json值

标签 json ansible

这个 ansible 剧本有效

---
- hosts: localhost
  gather_facts: False

  vars:
    jq: "[?contains(name, 'Pizza')]"
    json: |
       [{
            "name": "Ted's Sub Shop - 720895714701",
            "templateid": "24632"
        },
        {
            "name": "Ted's Pizza - 720895714702",
            "templateid": "24663"
        }]

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

它返回以下内容

ok: [localhost] => {
    "msg": [
        {
            "name": "Ted's Pizza - 720895714702",
            "templateid": "24663"
        }
    ]
}

我需要更进一步,当 name 的值包含 Pizza 时,我需要它仅返回末尾的 12 位数字。所以返回输出看起来像这样

ok: [localhost] => {
    "msg": "720895714702"
}

想法?

最佳答案

你可以试试

- name: testplaybook jinja2
  hosts: localhost
  gather_facts: no
  vars:
    json: |
       [{
            "name": "Ted's Sub Shop - 720895714701",
            "templateid": "24632"
        },
        {
            "name": "Ted's Pizza - 720895714702",
            "templateid": "24663"
        }]
  tasks:
    - name: DEBUG
      debug:
        msg: "{{ json | from_json | selectattr('name', 'contains' , 'Pizza') 
                                  | map(attribute='name') 
                                  | map('regex_replace', '^.*?(\\d*)$', '\\1')}}" 

结果:

ok: [localhost] => {
    "msg": [
        "720895714702"
    ]
}

关于json - 当值包含ansible中的字符串时解析json值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72047807/

相关文章:

php - 试图从我的 json 中找到并摆脱这个\u0000

Java JSON 子对象

javascript - JSON.parse 适用于零元素数组 (node.js)

shell - Ansible执行命令

syntax - ansible 中 set_fact 和 vars 的 YAML 语法

ios - Alamofire 获取带参数数据的问题

javascript - 使用本地存储将具有动态键的数据存储在嵌套对象中

jinja2 - 如何在 Ansible 模板中引用主机变量?

ansible - 可以使用 ansible 变量在剧本中声明主机吗?

Vagrant:在创建虚拟机时运行 ansible provisioning?