我正在尝试使用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
但是,它只能找到特殊键的值,但不能设置范围(我的意思是范围是第一个&#34; {}
&#34;作为数组0 +第二个&#34; {}
&#34;作为数组1+&#34;字段&#34;在classLevelPermissions中不参与结果,在某种意义上我猜是深度级别)。我仍然无法解决问题,得到我想要的东西。
如何设置深度并放入相应的数组,例如[0],[1]?
答案 0 :(得分:1)
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']