13

我有一个需要加载到 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 新手(使用它不到一周)

4

1 回答 1

22

你几乎拥有它:

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) 

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

于 2012-06-25T12:09:41.607 回答