Python JSON解析重复记录 [英] Python JSON parse duplicate records
问题描述
在我的JSON文件中,我具有相同名称的记录序列
In my JSON file I have sequence of same-named records
"ability_upgrades":{
"ability":5155,
"time":1226
},
"ability_upgrades":{
"ability":5155,
"time":1426
},
"ability_upgrades":{
"ability":5155,
"time":1497
},
"ability_upgrades":{
"ability":5157,
"time":1543
},
如果我将使用json.loads
,它将仅保存最后一条记录.
我要ability_upgrades
的列表该怎么办?
If I will use json.loads
it will save only last of that records.
What I have to do if I want a list of ability_upgrades
?
推荐答案
文档说,json.loads
中的一个名为object_pairs_hook
的参数可用于处理重复的记录:
The documentation says a parameter called object_pairs_hook
in json.loads
can be used for handling duplicated records:
>>> json.loads(s, object_pairs_hook=(lambda x: x))
[(u'ability_upgrades', [(u'ability', 5155), (u'time', 1226)]), (u'ability_upgrades', [(u'ability', 5155), (u'time', 1426)]), (u'ability_upgrades', [(u'ability', 5155), (u'time', 1497)]), (u'ability_upgrades', [(u'ability', 5157), (u'time', 1543)])]
该功能的定义方式完全取决于您要的功能.在上面的示例中,由于该钩子获取了一个成对的列表作为参数,因此identity函数只是将列表返回.
How that function is defined is totally depending on what you want it to be. In the example above, since that hook gets as parameters a list of pairs, the identity function simply gives the list back.
例如,如果您定义:
def collectAbilityUpgrades(s):
d = {}
for k, v in s:
if k not in d:
d[k] = []
d[k].append(v)
return d
然后:
>>> json.loads(s, object_pairs_hook=collectAbilityUpgrades)
{u'ability_upgrades': [{u'ability': [5155], u'time': [1226]}, {u'ability': [5155], u'time': [1426]}, {u'ability': [5155], u'time': [1497]}, {u'ability': [5157], u'time': [1543]}]}
可能与您想要的相似.
这篇关于Python JSON解析重复记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!