Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中转储json文件时跳过或修改字段?_Python_Json_Mongodb_Pymongo - Fatal编程技术网

如何在Python中转储json文件时跳过或修改字段?

如何在Python中转储json文件时跳过或修改字段?,python,json,mongodb,pymongo,Python,Json,Mongodb,Pymongo,我正在以json格式转储Python中的MongoDB数据库。这是我的部分代码 cursor = collection.find() with open(json_file_path, 'w') as outfile: dump = json.dumps([doc for doc in cursor], sort_keys=False, indent=4, default=json_util.default) outfile.write(dump) 问题是pymongo添加了

我正在以json格式转储Python中的MongoDB数据库。这是我的部分代码

cursor = collection.find()

with open(json_file_path, 'w') as outfile:
    dump = json.dumps([doc for doc in cursor], sort_keys=False, indent=4, default=json_util.default)
    outfile.write(dump)
问题是pymongo添加了一个自己归档的
\u id
,并创建了一个类似
“\u id”:{“$oid”:“5c2b4813e43eda7815444204”}
。这将创建一个错误,即从该json文件加载时,
键“$oid”不能以“$”开头。
。所以我在想,在导出数据库时,是否可以同时修改或跳过这个字段?我该怎么做

{
    "Employee ID": 9771504, 
    "NAME": "Harsh Wardhan", 
    "DOB": "14-Apr", 
    "MOBILE": 12345697890, 
    "Group": "SW-VS", 
    "_id": {
        "$oid": "5c2b4813e43eda7815444204"
    }, 
    "Emai ID": "hwardhan@examples.com"
}

假设为游标中的每个条目添加了额外的id,您可以在使用dict理解编写之前将其过滤掉

cursor = collection.find()

with open(json_file_path, 'w') as outfile:
    dump = json.dumps([{k:v for k,v in doc.items() if k != "_id"} for doc in cursor],
                      sort_keys=False, indent=4, default=json_util.default)
    outfile.write(dump)

假设为游标中的每个条目添加了额外的id,您可以在使用dict理解编写之前将其过滤掉

cursor = collection.find()

with open(json_file_path, 'w') as outfile:
    dump = json.dumps([{k:v for k,v in doc.items() if k != "_id"} for doc in cursor],
                      sort_keys=False, indent=4, default=json_util.default)
    outfile.write(dump)

您提供的示例是1
doc
?(又名,是否为每个文档添加了id字段?)。为每个文档添加id字段。为什么不在编码之前更改名称/跳过该字段?您提供的示例是1
doc
?(又名,是否为每个文档添加了id字段?)。每个文档都会添加id字段。为什么不在编码之前更改名称/跳过该字段呢?不过有一个问题。每次运行时都会在json文件中添加重复的行。如果您像以前那样在
w
write模式下打开json文件,则不会,该文件会被覆盖。不过有一个问题。每次运行时都会向json文件追加重复的行。如果您像以前那样在
w
write模式下打开json文件,则不会,该文件将被覆盖。