首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:如何在Python中更新JSON数据

Python:如何在Python中更新JSON数据
EN

Stack Overflow用户
提问于 2018-08-10 01:47:18
回答 1查看 488关注 0票数 0

下面的输入是JSON数组。我将下面的数据传递给我的Python方法。

代码语言:javascript
复制
input={"details": [{"first": [
                         {"id": "111", "flag": "T", "planName": "PPO"},
                         {"id": "123", "flag": "F", "planName": "HMO"},
                         {"id": "133", "flag": "T", "planName": "MA"}],
         "second": [{"planName": "PPO", "planRank": "3"},
                     {"planName": "HMO", "planRank": "4"},
                     {"planName": "MA", "planRank": "7"}]}]}

下面是JSON现有的文件,

代码语言:javascript
复制
final.json
    {"first": [{"id": "111", "flag": "T", "planName": "EPO"},
                {"id": "133", "flag": "T", "planName": "HMO"},
                {"id": "123", "flag": "T", "planName": "MA"}],
    "second": [{"planName": "PPO", "planRank": "1"},
                {"planName": "HMO", "planRank": "1"},
                {"planName": "MA", "planRank": "1"}]}

当我将上面的输入数据传递给我的Python方法时,现有JSON文件中的相应字段应该会得到我的输入JSON,当它与id的现有JSON匹配时,‘updated.From’和'planname‘应该用来自输入JSON的传递值来更新。

从第二次开始,当PlanRank与'planName‘匹配时,应该使用从输入传递的新值来更新它。

预期输出(现有的JSON文件应该会得到如下更新):

代码语言:javascript
复制
final.json

    {"first": [{"id": "111", "flag": "T", "planName": "PPO"},
                {"id": "133", "flag": "T", "planName": "MA"},
                {"id": "123", "flag": "F", "planName": "HMO"}],
    "second": [{"planName": "PPO", "planRank": "3"},
               {"planName": "HMO", "planRank": "4"},
               {"planName": "MA", "planRank": "7"}]}

我已经尝试了下面的代码,但没有成功。

代码语言:javascript
复制
def update_json():
    input={"details": [{"first": [
                             {"id": "111", "flag": "T", "planName": "PPO"},
                             {"id": "123", "flag": "F", "planName": "HMO"},
                             {"id": "133", "flag": "T", "planName": "MA"}],
             "second": [{"planName": "PPO", "planRank": "3"},
                         {"planName": "HMO", "planRank": "4"},
                         {"planName": "MA", "planRank": "7"}]}]}

    for x in input:

        property = open("final.json")
        data = json.load(property)
        for y in range(len(data)):
        for o in range(len(data['first'])):
            if (data['first'][o]['id'] == input[x][0]['id']):
                data['first'][o]['planName'] = input[x][0]['planName']
                data['first'][o]['flag'] = input[x][0]['flag']

        for j in range(len(data['second'])):
            print(data['details'][j])
            if (data['second'][j]['planName'] == input[x][0]['planName']):
                data['second'][j]['planRank'] = input[x][0]['planRank']
    with open(("final.json"), 'w') as file:

        value = json.dumps(data)
        file.write(value)

    return "value"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-10 05:19:23

你真的不应该把任何东西存储到变量input中,因为input是一个内置的python函数。

我尽了最大努力保持你的编码风格。

这适用于上面的示例:

代码语言:javascript
复制
def update_json():
    input_data = {"details": [{"first": [
                             {"id": "111", "flag": "T", "planName": "PPO"},
                             {"id": "123", "flag": "F", "planName": "HMO"},
                             {"id": "133", "flag": "T", "planName": "MA"}],
             "second": [{"planName": "PPO", "planRank": "3"},
                         {"planName": "HMO", "planRank": "4"},
                         {"planName": "MA", "planRank": "7"}]}]}

    with open('final.json') as f:
        data = json.load(f)

    for x in input_data['details'][0]['first']:
        for y in range(len(data['first'])):
            if x['id'] == data['first'][y]['id']:
                data['first'][y]['planName'] = x['planName']
                data['first'][y]['flag'] = x['flag']

    for j in input_data['details'][0]['second']:
        for k in range(len(data['second'])):
            if j['planName'] == data['second'][k]['planName']:
                data['second'][k]['planRank'] = j['planRank']

    with open(("final.json"), 'w') as file:
        value = json.dumps(data)
        file.write(value)

    return value

update_json()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51773106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档