我有一个需要加载到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的新手(使用它不到一周)
您几乎拥有它:
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)
您正在循环中返回字典,因此只需修改一个键。而且您不需要复制值,只需重命名键即可。