首页 文章

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

提问于
浏览
0

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

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现有文件,

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匹配时,那么'flag'和'planname'应该用传递的值更新来自输入JSON .

从第二个匹配'planName'时,应该使用从输入传递的新值更新PlanRank .

预期输出(现有JSON文件应获得如下更新):

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"}]}

我试过下面的代码,但没有运气 .

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"

1 回答

  • 1

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

    我尽力保持你的编码风格 .

    这适用于上面的例子:

    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()
    

相关问题