You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中解析指定JSON数据并实现排序操作?

Python解析并排序AWS IAM实例配置文件JSON数据

首先注意你提供的JSON片段有格式缺失(缺少闭合的括号和大括号),我先补全了完整的JSON结构方便演示。下面是具体的实现步骤和代码:

步骤说明

  1. 导入JSON模块:Python内置的json模块可以轻松处理JSON数据的解析和序列化。
  2. 解析JSON:将JSON字符串转换为Python可操作的字典/列表结构。
  3. 选择排序规则:根据你的需求,选择按实例配置文件ID、角色名称或其他字段排序,使用sorted()函数配合自定义的key实现。

完整代码示例

import json

# 补全后的完整JSON数据(如果你的数据来自文件,直接用json.load()读取即可)
json_data = '''
{
  "InstanceProfileList": [
    {
      "InstanceProfileId": "AIPAI6ZC646GGONRADRSK",
      "Roles": [
        {
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
              {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "ec2.amazonaws.com",
                    "ssm.amazonaws.com"
                  ]
                }
              }
            ]
          },
          "RoleId": "AROAJMI3DEQ4AW5JJMFII",
          "CreateDate": "2018-03-23T15:23:28Z",
          "RoleName": "ec2ssmMaintWindow",
          "Path": "/",
          "Arn": "arn:aws:iam::279052847476:role/ec2ssmMaintWindow"
        }
      ]
    },
    {
      "InstanceProfileId": "AIPAI6ZC646GGONRABCDE",
      "Roles": [
        {
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
              {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "ec2.amazonaws.com"
                  ]
                }
              }
            ]
          },
          "RoleId": "AROAJMI3DEQ4AW5JJXYZ",
          "CreateDate": "2018-03-24T10:15:00Z",
          "RoleName": "ec2BasicRole",
          "Path": "/",
          "Arn": "arn:aws:iam::279052847476:role/ec2BasicRole"
        }
      ]
    }
  ]
}
'''

# 解析JSON字符串为Python字典
parsed_data = json.loads(json_data)
instance_profiles = parsed_data['InstanceProfileList']

# 1. 按InstanceProfileId升序排序
sorted_by_profile_id = sorted(instance_profiles, key=lambda x: x['InstanceProfileId'])

# 2. 按关联角色的RoleName升序排序(每个实例配置文件对应一个角色,取Roles[0])
sorted_by_role_name = sorted(instance_profiles, key=lambda x: x['Roles'][0]['RoleName'])

# 3. 可选:降序排序(比如按InstanceProfileId降序)
sorted_by_profile_id_desc = sorted(instance_profiles, key=lambda x: x['InstanceProfileId'], reverse=True)

# 打印验证结果
print("=== 按InstanceProfileId升序排序 ===")
for profile in sorted_by_profile_id:
    print(f"ID: {profile['InstanceProfileId']}, 角色名称: {profile['Roles'][0]['RoleName']}")

print("\n=== 按RoleName升序排序 ===")
for profile in sorted_by_role_name:
    print(f"ID: {profile['InstanceProfileId']}, 角色名称: {profile['Roles'][0]['RoleName']}")

关键细节解释

  • 解析JSON:如果你的JSON数据存储在文件中,替换json.loads()json.load(),示例如下:
    with open('your_profile_data.json', 'r') as f:
        parsed_data = json.load(f)
    
  • 排序键的自定义lambda函数用来提取排序所需的字段,如果你需要按其他字段(比如角色的CreateDate)排序,只需要修改key的取值即可:
    sorted_by_create_date = sorted(instance_profiles, key=lambda x: x['Roles'][0]['CreateDate'])
    
  • 降序排序:只需要在sorted()函数中添加reverse=True参数,就能实现从大到小的排序。

内容的提问来源于stack exchange,提问作者Milister

火山引擎 最新活动