如何在不同的{}和[]中获得相应的json数据(使用Python)?

2024-09-28 04:50:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python Flask处理JSON数据。
以下是我的数据:

[
    {   'className': 'BoardGame', 
        'fields': {
            'objectId': {'type': 'String'}, 
            'playerName': {'type': 'String'}, 
            'cheatMode': {'type': 'Boolean'}, 
            'score': {'type': 'Number'}, 
            'updatedAt': {'type': 'Date'}, 
            'createdAt': {'type': 'Date'}
        }, 
        'classLevelPermissions': {
            'addField': {'*': True}, 
            'create': {'*': True}, 'get': {'*': True}, 
            'update': {'*': True}, 'find': {'*': True}, 
            'delete': {'*': True}
        }
    }, 
    {   'className': 'RPGGAme', 
        'fields': {
            'objectId': {'type': 'String'}, 
            'GameId': {'type': 'String'}, 
            'robotName': {'type': 'String'}, 
            'updatedAt': {'type': 'Date'}, 
            'createdAt': {'type': 'Date'}
        }, 
        'classLevelPermissions': {
            'addField': {'*': True}, 
            'create': {'*': True}, 'get': {'*': True}, 
            'fields': {'*': True}, 'find': {'*': True}, 
            'delete': {'*': True}
        }
    }
]

问题是由于[]{}的复杂格式,我无法获得相应的数据

这是我想要的:

[0]["className"]: "BoardGame" <---String
[0]["fields"]: ["objectId","playerName","cheatMode"....] <-- List Of String
[1]["className"]: "RPGGame"    <---String
[1]["fields"]: ["objectId","GameId",....]   <-- List Of String

因此,我尝试了以下代码:

def findkeys(node, kv):
    if isinstance(node, list):
        for i in node:
            for x in findkeys(i, kv):
                yield x
    elif isinstance(node, dict):
        if kv in node:
            yield node[kv]
        for j in node.values():
            for x in findkeys(j, kv):
                yield x 

但是,它只能找到特殊键的值,但不能设置范围(我所说的范围是第一个“{}”作为数组0+第二个“{}”作为数组1+classLevelPermissions中的“fields”不会参与结果,某种意义上我猜是深度级别)。我还是不能解决问题,得到我想要的。你知道吗

如何设置深度并放入相应的数组,例如[0],[1]?你知道吗


Tags: 数据innodetruefieldsfordatestring
1条回答
网友
1楼 · 发布于 2024-09-28 04:50:13
data = [
    {   'className': 'BoardGame', 
        'fields': {
            'objectId': {'type': 'String'}, 
            'playerName': {'type': 'String'}, 
            'cheatMode': {'type': 'Boolean'}, 
            'score': {'type': 'Number'}, 
            'updatedAt': {'type': 'Date'}, 
            'createdAt': {'type': 'Date'}
        }, 
        'classLevelPermissions': {
            'addField': {'*': True}, 
            'create': {'*': True}, 'get': {'*': True}, 
            'update': {'*': True}, 'find': {'*': True}, 
            'delete': {'*': True}
        }
    }, 
    {   'className': 'RPGGAme', 
        'fields': {
            'objectId': {'type': 'String'}, 
            'GameId': {'type': 'String'}, 
            'robotName': {'type': 'String'}, 
            'updatedAt': {'type': 'Date'}, 
            'createdAt': {'type': 'Date'}
        }, 
        'classLevelPermissions': {
            'addField': {'*': True}, 
            'create': {'*': True}, 'get': {'*': True}, 
            'fields': {'*': True}, 'find': {'*': True}, 
            'delete': {'*': True}
        }
    }
]

试试这个:

oput = {}
for idx, dict in enumerate(data):
    oput[idx] = {}
    oput[idx]["className"] = dict["className"]
    oput[idx]["fields"] = dict["fields"].keys()

然后:

oput[0]["className"]
>> 'BoardGame'

oput[0]["fields"]
>>  ['objectId', 'playerName', 'cheatMode', 'score', 'updatedAt', 'createdAt']

oput[1]["className"]
>> 'RPGGAme'

oput[1]["fields"]
>> ['robotName', 'GameId', 'createdAt', 'objectId', 'updatedAt']

相关问题 更多 >

    热门问题