我已经编写了一个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_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
}
我可以在我的代码中更改什么来获得我的预期输出,这可能是我的代码上的一个简单错误,任何编辑我的指针都将不胜感激
我认为你的问题与
with
声明有关。我以前也遇到过类似的问题。你知道吗我认为
json_data
变量没有更新,因为它只是在with open(json_file, 'r') as f:
内部初始化的,因为json.load(f)
,它依赖于文件f
。你知道吗或许您可以尝试缩进这部分代码:
所以它属于第一个
with
语句?你知道吗也许是这样的?你知道吗
另外,如果您将(json_数据)打印到与我在上面代码段中放置的位置相同的位置,它是否打印出正确的预期输出?你知道吗
希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐