代码之家  ›  专栏  ›  技术社区  ›  Milister

使用JQ解析JSON文件并将其导出到CSV-BASH

  •  1
  • Milister  · 技术社区  · 7 年前

    JSON文件: https://1drv.ms/u/s!AizscpxS0QM4hJl_VRQaWbm6D8T8_w

    这是一个部分:

    "RoleDetailList": [
            {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17", 
                    "Statement": [
                        {
                            "Action": "sts:AssumeRoleWithSAML", 
                            "Effect": "Allow", 
                            "Condition": {
                                "StringEquals": {
                                    "SAML:aud": "https://signin.aws.amazon.com/saml"
                                }
                            }, 
                            "Principal": {
                                "Federated": "arn:aws:iam::279052847476:saml-provider/CompanyADFS"
                            }
                        }
                    ]
                }, 
                "RoleId": "AROAJANL3L2IZ6UISEGAU", 
                "CreateDate": "2016-08-20T13:51:07Z", 
                "InstanceProfileList": [], 
                "RoleName": "ADFS-Administrators", 
                "Path": "/", 
                "AttachedManagedPolicies": [], 
                "RolePolicyList": [
                    {
                        "PolicyName": "Administrator-Access", 
                        "PolicyDocument": {
                            "Version": "2012-10-17", 
                            "Statement": [
                                {
                                    "Action": "*", 
                                    "Resource": "*", 
                                    "Effect": "Allow", 
                                    "Sid": "Stmt1434192117145"
                                }
                            ]
                        }
                    }
                ], 
                "Arn": "arn:aws:iam::279052847476:role/ADFS-Administrators"
            },
    

    如何将JSON文件中的所有这些部分(仅此部分的示例)转换为CSV格式?

    @Roman,您的解决方案有效,如何添加另一列,从中获取策略名称

    "AttachedManagedPolicies": [
                    {
                        "PolicyName": "pol-amtest-ro", 
                        "PolicyArn": "arn:aws:iam::279052847476:policy/pol-amtest-ro"
                    }
                ], 
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   RomanPerekhrest    7 年前

    jq 解决方案:

    jq -r '.RoleDetailList 
           | map(select((.AssumeRolePolicyDocument.Statement | length > 0) 
                         and (.AssumeRolePolicyDocument.Statement[0].Principal.Federated) 
                         and (.RolePolicyList | length > 0))
             )[] 
           | [(.AssumeRolePolicyDocument.Statement[0] | .Action, .Principal.Federated),
               .RoleName, .RolePolicyList[0].PolicyName] | @csv' output.json
    

    输出:

    "sts:AssumeRoleWithSAML","arn:aws:iam::279052847476:saml-provider/companyADFS","ADFS-Administrators","Administrator-Access"