我有一个很大的json var, struct 是这样的:

 {
    "ad_groups": [
        {
            "display_name": "GROUPNAME",
            "group_members": [
                {
                    "account_enabled": BOOL VALUE,
                    "display_name": "NAME",
                    "mail": "EMAIL",
                    "mail_nickname": "NAME",
                    "User_ID": "ID",
                    "user_principal_name": "NAME",
                    "user_type": "MEMBERSHIP VALUE"
                },
                {
                    "account_enabled": BOOL VALUE,
                    "display_name": "NAME",
                    "mail": "EMAIL",
                    "mail_nickname": "NAME",
                    "User_ID": "ID",
                    "user_principal_name": "NAME",
                    "user_type": "MEMBERSHIP VALUE"
                },
                // OTHER MEMBERS
                    .
                    .
                    .
                }
            ],
            "mail": MAIL,
            "mail_enabled": BOOL VALUE,
            "mail_nickname": "NAME",
            "Group_ID": "ID",
            "security_enabled": BOOL VALUE
        },
        {
            // SECOND GROUP DETAILS AS FIRST GROUP
        },
        // OTHER GROUPS with the same format as above
         .
         . 
         . 
    ],
   // SOME MORE DETAILS ON THE TENANT
}
         

我想从这个JSON变量中提取一个项目列表.每个项目名称应该是Group_ID值,而该特定项目的值应该是属于该特定组的所有用户ID(USER_ID值).

我try 使用Ansible中的set_fact AND循环来提取所需的字段,但并不是非常成功.

推荐答案

过滤器json_query和功能dict完成这项工作

  result: "{{ dict(ad_groups|
                   json_query('[].[Group_ID, group_members[].User_ID]')
                  ) }}"

完整的测试攻略示例

- hosts: all

  vars:

    ad_groups:
      - Group_ID: GID_1
        display_name: GROUPNAME
        group_members:
          - User_ID: UID_1
            account_enabled: BOOL VALUE
            display_name: NAME
            mail: EMAIL
            mail_nickname: NAME
            user_principal_name: NAME
            user_type: MEMBERSHIP VALUE
          - User_ID: UID_2
            account_enabled: BOOL VALUE
            display_name: NAME
            mail: EMAIL
            mail_nickname: NAME
            user_principal_name: NAME
            user_type: MEMBERSHIP VALUE
        mail: MAIL
        mail_enabled: BOOL VALUE
        mail_nickname: NAME
        security_enabled: BOOL VALUE

    result: "{{ dict(ad_groups|json_query('[].[Group_ID, group_members[].User_ID]')) }}"

  tasks:

    - debug:
        var: result

赠送

  result:
    GID_1:
    - UID_1
    - UID_2

Json相关问答推荐

如何使用JQ打印每个根级对象键一行?

在解码的JSON哈希中搜索数组元素

有没有办法让serde_json正确/不正确地处理NaN、inf和-inf(IEEE 754特殊标准)?

JOLT转换以根据条件删除json对象

VSCode 为 python 文件添加标尺,但不为 C 文件添加标尺.为什么?

在 PowerShell 中通过 aws cli 创建 cloudwatch alert 时出现字符串解析错误

VBA-JSON 嵌套集合解析为 Excel

为什么解析的字典相等而腌制的字典不相等?

为什么根据其他工具,来自 aws rds 的 JSON 在 Docker 中格式错误运行?

Flutter:在本地文件 json 中搜索特殊的阿拉伯字符

解析 JSON API 响应

如何解决名为 null 的map值

如何将任意 json 对象发布到 webapi

如何在 swift 2 中获取 Alamofire.request().responseJSON 的结果值?

JSON 到 JSON 转换器

C#扁平化json struct

严重:找不到媒体类型 = 应用程序/json、类型 = 类 com.jersey.jaxb.Todo、通用类型 = 类 com.jersey.jaxb.Todo 的 MessageBodyWriter

确保数组中的项目属性在 Json Schema 中是唯一的?

如何向 json IAM 策略添加 comments ?

如何从 MySQL 中检索 JSON 数据?