Python JSON解析重复记录 [英] Python JSON parse duplicate records

查看:233
本文介绍了Python JSON解析重复记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆