Python解析JSON嵌套文件

时间:2020-12-27 16:55:53

标签: json python-3.x parsing

{
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft": "Warning",
            "Microsoft.Hosting.Lifetime": "Information",
            "Microsoft.AspNetCore": "Warning",
            "System.Net.Http.HttpClient.Default.ClientHandler": "Warning",
            "System.Net.Http.HttpClient.Default.LogicalHandler": "Warning"
        }
    },
    "AllowedHosts": "*",
    "AutomaticTransferOptions": {
        "DateOffsetForDirectoriesInDays": -1,
        "DateOffsetForPortfoliosInDays": -3,
        "Clause": {
            "Item1": "1"
        }    
    },
    "Authentication": {
        "ApiKeys": [
            {
                "Key": "AB8E5976-2A7C-4EEE-92C1-7B0B4DC840F6",
                "OwnerName": "Cron job",
                "Claims": [
                    {
                        "Type": "http://schemas.microsoft.com/ws/2008/06/identity/claims/role",
                        "Value": "StressTestManager"
                    }
                ]
            },
            {
                "Key": "B11D4F27-483A-4234-8EC7-CA121712D5BE",
                "OwnerName": "Test admin",
                "Claims": [
                    {
                        "Type": "http://schemas.microsoft.com/ws/2008/06/identity/claims/role",
                        "Value": "StressTestAdmin"
                    },
                    {
                        "Type": "http://schemas.microsoft.com/ws/2008/06/identity/claims/role",
                        "Value": "TestManager"
                    }
                ]
            },
            {
                "Key": "EBF98F2E-555E-4E66-9D77-5667E0AA1B54",
                "OwnerName": "Test manager",
                "Claims": [
                    {
                        "Type": "http://schemas.microsoft.com/ws/2008/06/identity/claims/role",
                        "Value": "TestManager"
                    }
                ]
            }
        ],
        "LDAP": {
            "Domain": "domain.local",
            "MachineAccountName": "Soft13",
            "MachineAccountPassword": "vixuUEY7884*",
            "EnableLdapClaimResolution": true
        }
    },
    "Authorization": {
        "Permissions": {
            "Roles": [
                {
                    "Role": "TestAdmin",
                    "Permissions": [
                        "transfers.create",
                        "bindings.create"
                    ]
                },
                {
                    "Role": "TestManager",
                    "Permissions": [
                        "transfers.create"
                    ]
                }
            ]
        }
    }
}

我上面有 JSON,需要用这样的输出来解析它

Logging__LogLevel__Default
Authentication__ApiKeys__0__Claims__0__Type

我在python3中有这个代码:

def checkdepth(sub_key, variable):
    delmt = '__'
    for item in sub_key:
        try:
            if isinstance(sub_key[item], dict):
                sub_variable = variable + delmt + item
                checkdepth(sub_key[item], sub_variable)
        except TypeError:
            continue

        if isinstance(sub_key[item], list):
            sub_variable = variable + delmt + item
            for it in sub_key[item]:
                sub_variable = variable + delmt + item + delmt + str(sub_key[item].index(it))
                checkdepth(it, sub_variable)
            print(sub_variable)

        if isinstance(sub_key[item], int) or isinstance(sub_key[item], str):
                sub_variable = variable + delmt + item
                print (sub_variable)

for key in data:   
    if type(data[key]) is str:
       print(key + '=' +str(data[key]))
    else:
      variable = key
      checkdepth(data[key], variable)

一切正常,但我总是在这个输出中得到一些字符串

Authentication__ApiKeys__0__Key
Authentication__ApiKeys__0__OwnerName
Authentication__ApiKeys__0__Claims__0__Type
Authentication__ApiKeys__0__Claims__0__Value
Authentication__ApiKeys__0__Claims__0
Authentication__ApiKeys__2
Authorization__Permissions__Roles__0__Role
Authorization__Permissions__Roles__0__Permissions__1
Authorization__Permissions__Roles__1__Role
Authorization__Permissions__Roles__1__Permissions__0
Authorization__Permissions__Roles__1

为什么我的代码添加的不是完整的字符串

Authentication__ApiKeys__0__Claims__0
Authentication__ApiKeys__2
Authorization__Permissions__Roles__1

为什么它不打印来自

的每个值
Authorization__Permissions__Roles__0__Permissions__*

来自

Authorization__Permissions__Roles__1__Permissions__*

我知道我处理列表数据类型的块中的问题

0 个答案:

没有答案