一尘不染

如何在python中的json.load中编辑/重命名键?

json

我有一个需要加载到mongodb中的json文件(〜3Gb)。不少json键包含一个。(点),这会导致加载到mongodb的操作失败。我想加载json文件,并在此过程中编辑键名,例如用空空格替换点。使用以下python代码

import json

def RemoveDotKey(dataPart):
    for key in dataPart.iterkeys():
        new_key = key.replace(".","")
        if new_key != key:
            newDataPart = deepcopy(dataPart)
            newDataPart[new_key] = newDataPart[key]
            del newDataPart[key]
            return newDataPart
    return dataPart

new_json = json.loads(data, object_hook=RemoveDotKey)

名为RemoveDotKey的object_hook应该遍历所有键,它的键包含一个点,创建一个副本,用空格替换该点,然后返回副本。创建了dataPart的副本,因为不确定我是否可以遍历dataPart的键并同时插入/删除键值对。

这里似乎有一个错误,其中所有带有点的json键都没有被编辑。我不太确定json.load的工作方式。也是python的新手(使用它不到一周)


阅读 342

收藏
2020-07-27

共1个答案

一尘不染

您几乎拥有它:

import json

def remove_dot_key(obj):
    for key in obj.keys():
        new_key = key.replace(".","")
        if new_key != key:
            obj[new_key] = obj[key]
            del obj[key]
    return obj

new_json = json.loads(data, object_hook=remove_dot_key)

您正在循环中返回字典,因此只需修改一个键。而且您不需要复制值,只需重命名键即可。

2020-07-27