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 - Fatal编程技术网

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

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

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

我认为您的问题与带有语句的
有关。我认识到以前也遇到过类似的问题

我认为
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,因为我必须给出一个描述;我可以通过私人聊天发送给你