Python 在JSON文件中添加新密钥
我已经编写了一个python脚本,该脚本的目的是将json文件更新为我的数据库可以使用的密钥 以下是我的代码:Python 在JSON文件中添加新密钥,python,json,Python,Json,我已经编写了一个python脚本,该脚本的目的是将json文件更新为我的数据库可以使用的密钥 以下是我的代码: import json import os json_dir="/home/" json_dir_processed="/home/new/" for json_file in os.listdir(json_dir): if json_file.endswith(".json"): processed_json = "%s%s" % (json_dir_pr
import json
import os
json_dir="/home/"
json_dir_processed="/home/new/"
for json_file in os.listdir(json_dir):
if json_file.endswith(".json"):
processed_json = "%s%s" % (json_dir_processed, json_file)
json_file = json_dir + json_file
print "Processing %s -> %s" % (json_file, processed_json)
with open(json_file, 'r') as f:
json_data = json.load(f)
# replacement mapping
update_map = {"grp_farmerreg/farmerdetails/farmermobile":"grp_farmerdts/hh_id",
"grp_farmerdts/hh_region": "grp_farmerdts/region",
"grp_farmerdts/hh_district":"grp_farmerdts/district",
"grp_farmerdts/hh_ward":"grp_farmerdts/ward",
"grp_farmerdts/hh_village":"grp_farmerdts/village"}
diff_keys = set(update_map.keys()) - set(json_data.keys())
if not diff_keys:
print("No Update to JSON keys")
else:
for k in diff_keys:
if update_map[k] in json_data:
json_data[k] = json_data[update_map[k]]
with open(processed_json, 'w') as f:
f.write(json.dumps(json_data, indent=4))
else:
print "%s not a JSON file" % json_file
运行这个python脚本后得到的JSON输出如下所示:一些JSON文件已经有我想要创建的键,所以我只想在预期的键不可用时更新
{
....
"_bamboo_dataset_id": "",
"hh_id": "0912017300",
"hh_country": "1",
"hh_region": "3",
"hh_district": "20",
"_submitted_by": null,
"enumtype": "2",
"hh_village": "2130",
"_attachments": [],
"regactivity": "3",
"grpanimreg/grp_farmanimals/farmersanimalsyesno": "0",
"_submission_time": "2019-11-13T08:16:54",
"_version": "20190910",
"_geolocation": [
7.2098272,
37.7733643
],
"end_time": "2019-11-13T11:18:40.615+03",
"_id": 809956
}
我的预期输出:我的代码似乎没有更新新的密钥,我无法找出原因
{
....
"_bamboo_dataset_id": "",
"farmermobile": "0912017300",
"hh_country": "1",
"hh_region": "3",
"hh_district": "20",
"_submitted_by": null,
"enumtype": "2",
"hh_village": "2130",
"_attachments": [],
"regactivity": "3",
"grpanimreg/grp_farmanimals/farmersanimalsyesno": "0",
"_submission_time": "2019-11-13T08:16:54",
"_version": "20190910",
"_geolocation": [
7.2098272,
37.7733643
],
"end_time": "2019-11-13T11:18:40.615+03",
"_id": 809956
}
我可以在我的代码中更改什么以获得预期的输出,这可能是我的代码中的一个简单错误。如果有任何指向编辑我的代码的指针,我将不胜感激我认为您的问题与带有语句的
有关。我认识到以前也遇到过类似的问题
我认为json\u数据
变量没有更新,因为它只在中初始化,open(json\u文件,'r')为f:
,其中它依赖于文件f
,因为json.load(f)
也许您可以尝试缩进这部分代码:
with open(processed_json, 'w') as f:
f.write(json.dumps(json_data, indent=4))
这样它就落在第一个with
语句中了
也许是这样的
import json
import os
json_dir="/home/"
json_dir_processed="/home/"
for json_file in os.listdir(json_dir):
if json_file.endswith(".json"):
processed_json = "%s%s" % (json_dir_processed, json_file)
json_file = json_dir + json_file
print "Processing %s -> %s" % (json_file, processed_json)
with open(json_file, 'r') as f:
json_data = json.load(f)
# replacement mapping
update_map = {"grp_farmerreg/farmerdetails/farmermobile":"grp_farmerdts/hh_id",
"grp_farmerdts/hh_region": "grp_farmerdts/region",
"grp_farmerdts/hh_district":"grp_farmerdts/district",
"grp_farmerdts/hh_ward":"grp_farmerdts/ward",
"grp_farmerdts/hh_village":"grp_farmerdts/village"}
diff_keys = set(update_map.keys()) - set(json_data.keys())
if not diff_keys:
print("No Update to JSON keys")
else:
for k in diff_keys:
if update_map[k] in json_data:
json_data[k] = json_data[update_map[k]]
print(json_data)
with open(processed_json, 'w') as f:
f.write(json.dumps(json_data, indent=4))
else:
print "%s not a JSON file" % json_file
另外,如果您在与我在上面代码段中放置的相同位置打印(json_数据),它是否打印正确的预期输出
希望这有帮助 您可以发布原始的json
文件来了解完整情况吗?您是否也在尝试替换/更新密钥?还是值?我无法发布整个JSON,因为我必须给出一个描述;我可以通过私人聊天发送给你