在我的JSON文件中,我具有相同名称的记录序列
"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
的列表该怎么办?
python大神给出的解决方案
The documentation表示object_pairs_hook
中一个名为json.loads
的参数可用于处理重复的记录:
>>> 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函数仅将列表返回。
例如,如果您定义:
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]}]}
这可能类似于您想要的。