首页 > 解决方案 > Python,解析 JSON-order by/sort by

问题描述

我有这个 JSON 数据:

 "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"
                        }
                    ]

我使用下面的代码来解析它:

def get_user_group_service(element):
    s = ''
    for e in element['AssumeRolePolicyDocument']['Statement']:
        p = e['Principal']
        if 'Federated' in p:
            s += p['Federated']
        if 'Service' in p:
            obj = p['Service']
            if type(obj) is str:
                s += obj  # element is string
            else:
                s += ''.join(obj)  # element is array of strings
        if 'AWS' in p:
            s += p['AWS']
    return s

现在,问题是有时Service元素包含:

ec2.amazonaws.com ssm.amazonaws.com

而有时:

ssm.amazonaws.com ec2.amazonaws.com

每次的顺序都不一样。

它的显示顺序并不重要,我只需要输出保持一致。有没有办法按字母顺序排列这个输出?

我用谷歌搜索它,它似乎obj.sort()会修复它,但不知道如何应用它。

标签: pythonjson

解决方案


据我了解,您想要一个以空格分隔的排序字符串。这是我的方法。

x = 'ec2ssmMaintWindow,AmazonSSMMaintenanceWindowRole,ec2.amazonaws.com ssm.amazonaws.com'
sorted_only_space_sparated = [ ' '.join( z for z in sorted(y.split(' '), reverse=True)) for y in x.split(',')]

print(','.join(str(i) for i in sorted_only_space_sparated))

输出:

ec2ssmMaintWindow,AmazonSSMMaintenanceWindowRole,ssm.amazonaws.com ec2.amazonaws.com

让我知道它是否有帮助。


推荐阅读