首页 > 解决方案 > 如何从列表中获取嵌套值

问题描述

我无法从我解释的此类数组中包含特定值的 json 代码中获取 ID:我有此代码 json:

{
  "results": [
    {
      "TAB": "bleu",
      "exp": [
        {
          "A": "NOT_PROTECTED",
          "B": [
            "500",
            "600"
          ],
          "C": false
        }
      ],
      "ID": "000041"
    },
    {
      "TAB": "rouge",
      "exp": [
        {
          "A": "PROTECTED",
          "B": [
            "700",
            "800"
          ],
          "C": true
        }
      ],
      "ID": "000042"
    }
  ]
}

标签: ansiblejmespathjson-query

解决方案


我假设问题是您如何访问 Ansible 中的值,因为它具有 ansible 标记。

您可以使用 Ansible 中的地图过滤器来访问如下值:(您的 json 在some_json变量中的位置。)

- debug:
    msg: "{{ some_json.results | map(attribute='ID') | list }}"

结果:

ok: [localhost] => {  
    "msg": [          
        "000041",     
        "000042"      
    ]                 
}                     

如果你想用json_query/jmespath(因为问题也用json_queryand标记jmespath)那么它会是这样的:

- debug:
    msg: "{{ some_json.results | json_query('[*].ID') | list }}"
ok: [localhost] => {
    "msg": [        
        "000041",   
        "000042"    
    ]               
}                   

话虽如此,我自己更喜欢这种map方法,因为它不需要安装任何额外的依赖json_queryjmespath


推荐阅读