在JSON fi中添加新密钥

2024-04-26 04:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个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
    }

我可以在我的代码中更改什么来获得我的预期输出,这可能是我的代码上的一个简单错误,任何编辑我的指针都将不胜感激


Tags: 代码idjsonmapdatahhdirupdate
1条回答
网友
1楼 · 发布于 2024-04-26 04:35:31

我认为你的问题与with声明有关。我以前也遇到过类似的问题。你知道吗

我认为json_data变量没有更新,因为它只是在with open(json_file, 'r') as f:内部初始化的,因为json.load(f),它依赖于文件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_数据)打印到与我在上面代码段中放置的位置相同的位置,它是否打印出正确的预期输出?你知道吗

希望这有帮助!你知道吗

相关问题 更多 >