如何从JSON中提取特定节并将其转换为CSV

如何从JSON中提取特定节并将其转换为CSV,json,bash,jq,aws-cli,Json,Bash,Jq,Aws Cli,output.json的一部分(文件有多个相同的部分,只有角色/策略名称不同)完整链接: 如何获得以下输出(将IAM角色映射到策略)并使用jq将其转换为csv文件 jq -r '.AssumeRolePolicyDocument[]| .fields.RoleName | @csv' output.json jq: error (at output.json:11895): Cannot iterate over null (null) 期望输出: AWSCorpAdmin,Administ

output.json的一部分(文件有多个相同的部分,只有角色/策略名称不同)完整链接:

如何获得以下输出(将IAM角色映射到策略)并使用jq将其转换为csv文件

jq -r '.AssumeRolePolicyDocument[]| .fields.RoleName |  @csv' output.json
jq: error (at output.json:11895): Cannot iterate over null (null)
期望输出:

AWSCorpAdmin,AdministratorAccess 

我需要循环遍历整个JSON文件并获取每个角色的策略(以上仅为示例)

jq
解决方案:

jq -r '.RoleDetailList | map(select(.AttachedManagedPolicies | length > 0))[] 
       | .RoleName as $r | .AttachedManagedPolicies[] 
       | [$r, .PolicyName] | @csv' output.json
样本输出:

"ADFS-amtest-ro","pol-amtest-ro"
"adfs-host-role","pol-amtest-ro"
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWebTier"
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkMulticontainerDocker"
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWorkerTier"
"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkEnhancedHealth"
"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkService"
"AWSAccCorpAdmin","AdministratorAccess"
"AWScompanyCorpAdmin","AdministratorAccess"
"AWScompanyCorpPowerUser","PowerUserAccess"
"AWSServiceRoleForAutoScaling","AutoScalingServiceRolePolicy"
"AWSServiceRoleForElasticBeanstalk","AWSElasticBeanstalkServiceRolePolicy"
"AWSServiceRoleForElasticLoadBalancing","AWSElasticLoadBalancingServiceRolePolicy"
"AWSServiceRoleForOrganizations","AWSOrganizationsServiceTrustPolicy"
"AWSServiceRoleForRDS","AmazonRDSServiceRolePolicy"
"Cloudyn","ReadOnlyAccess"
"DatadogAWSIntegrationRole","DatadogAWSIntegrationPolicy"
"datadog_alert_metrics_role","AWSLambdaBasicExecutionRole-66abe1f2-cee8-4a90-a026-061b24db1b02"
"dev-instance-role","dev-instance-role-policy"
"ecsInstanceRole","AmazonEC2ContainerServiceforEC2Role"
"ecsServiceRole","AmazonEC2ContainerServiceRole"
"companySAMLUser","AdministratorAccess"
"irole-matlabscheduler","pol-marketdata-rw"
"lambda-ec2-ami-role","lambda-ec2-ami-policy"
"lambda_api_gateway_twilio_processor","AWSLambdaBasicExecutionRole-f47a6b57-b716-4740-b2c6-a02fa6480153"
"lambda_api_gateway_twilio_processor","AWSLambdaSNSPublishPolicyExecutionRole-d31a9f16-80e7-47c9-868a-f162396cccf6"
"OneLoginAdmin","AdministratorAccess"
"OneLoginDev","PowerUserAccess"
"rds-monitoring-role","AmazonRDSEnhancedMonitoringRole"
"role-amtest-ro","pol-amtest-ro"
...

jq:error(在output.json:12033):无法在null(null)上迭代,不需要;t work,这是更大的JSON文件的一部分,有更多带有AssumePolicyRoleDocumen@Milister,除非您发布它,否则无法猜测您的“更大的json”。如果不重要的话,您可以共享完整json的链接,比如通过pastebin.com,这样我就可以看到并处理它
"ADFS-amtest-ro","pol-amtest-ro"
"adfs-host-role","pol-amtest-ro"
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWebTier"
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkMulticontainerDocker"
"aws-elasticbeanstalk-ec2-role","AWSElasticBeanstalkWorkerTier"
"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkEnhancedHealth"
"aws-elasticbeanstalk-service-role","AWSElasticBeanstalkService"
"AWSAccCorpAdmin","AdministratorAccess"
"AWScompanyCorpAdmin","AdministratorAccess"
"AWScompanyCorpPowerUser","PowerUserAccess"
"AWSServiceRoleForAutoScaling","AutoScalingServiceRolePolicy"
"AWSServiceRoleForElasticBeanstalk","AWSElasticBeanstalkServiceRolePolicy"
"AWSServiceRoleForElasticLoadBalancing","AWSElasticLoadBalancingServiceRolePolicy"
"AWSServiceRoleForOrganizations","AWSOrganizationsServiceTrustPolicy"
"AWSServiceRoleForRDS","AmazonRDSServiceRolePolicy"
"Cloudyn","ReadOnlyAccess"
"DatadogAWSIntegrationRole","DatadogAWSIntegrationPolicy"
"datadog_alert_metrics_role","AWSLambdaBasicExecutionRole-66abe1f2-cee8-4a90-a026-061b24db1b02"
"dev-instance-role","dev-instance-role-policy"
"ecsInstanceRole","AmazonEC2ContainerServiceforEC2Role"
"ecsServiceRole","AmazonEC2ContainerServiceRole"
"companySAMLUser","AdministratorAccess"
"irole-matlabscheduler","pol-marketdata-rw"
"lambda-ec2-ami-role","lambda-ec2-ami-policy"
"lambda_api_gateway_twilio_processor","AWSLambdaBasicExecutionRole-f47a6b57-b716-4740-b2c6-a02fa6480153"
"lambda_api_gateway_twilio_processor","AWSLambdaSNSPublishPolicyExecutionRole-d31a9f16-80e7-47c9-868a-f162396cccf6"
"OneLoginAdmin","AdministratorAccess"
"OneLoginDev","PowerUserAccess"
"rds-monitoring-role","AmazonRDSEnhancedMonitoringRole"
"role-amtest-ro","pol-amtest-ro"
...