首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一个json文件中的键匹配更新Json文件值

根据另一个json文件中的键匹配更新Json文件值
EN

Stack Overflow用户
提问于 2022-06-28 11:55:02
回答 1查看 28关注 0票数 0

目标:匹配两个json文件中json元素值中的键和覆盖值。

输入:

源代码json文件如下:

代码语言:javascript
复制
{"CLIENT_CODE":"client-d",
    "ARM_SUBSCRIPTION_ID":"abced-edfgh-dk6dkk-97dke",
    "location":"easteurope"}

目标json文件如下所示:

代码语言:javascript
复制
{"CLIENT_CODE":"dummy",
    "ARM_SUBSCRIPTION_ID":"dummy",
    "prefix":"orp",
    "location":"westeurope",
    "address_space":"10.0.0.0/16",
    "aad_login_name":"abcd.onmicrosoft.com",
    "aad_login_object_id":"dummy",
    "aad_login_tenant_id":"dummy",
    "bastion_allocation_method":"Static",
    "bastion_sku_type":"premium",
    "kv_sku_name":"premium",
    "storage_account_tier":"Standard",
    "storage_account_replication_type":"LRS",
    "storage_account_kind":"StorageV2",
    "sql_pool_sku_name":"DW100C",
    "node_size_family":"MemoryOptimized"}

预期输出:

代码语言:javascript
复制
{"CLIENT_CODE":"client-d",
    "ARM_SUBSCRIPTION_ID":"abced-edfgh-dk6dkk-97dke",
    "prefix":"orp",
    "location":"easteurope",
    "address_space":"10.0.0.0/16",
    "aad_login_name":"abcd.onmicrosoft.com",
    "aad_login_object_id":"dummy",
    "aad_login_tenant_id":"dummy",
    "bastion_allocation_method":"Static",
    "bastion_sku_type":"premium",
    "kv_sku_name":"premium",
    "storage_account_tier":"Standard",
    "storage_account_replication_type":"LRS",
    "storage_account_kind":"StorageV2"}

我尝试了什么:

代码语言:javascript
复制
import json

with open("D:\ABTest\source.json", encoding='utf-8') as f:
    dataset1 = json.loads(f.read())
    #print(dataset1)

with open("D:\ABTest\\target.json", encoding='utf-8') as f:
    dataset2 = json.loads(f.read())
    #print(dataset2)

if dataset1.keys() == dataset2.keys():
   dataset2.update(dataset1)
   print(dataset2)

但我没有得到任何输出

Update1 :,现在我可以把它写在第三个文件中了。但无法更新相同的第二个文件,即target.json

代码语言:javascript
复制
import json

with open("D:\ABTest\source.json", encoding='utf-8') as f:
    d1 = json.loads(f.read())

with open("D:\ABTest\\target.json", encoding='utf-8') as f:
    d2 = json.loads(f.read())

for key in d1.keys():
    if key in d2.keys():
       d2[key] = d1[key]
       print(d2)

with open('D:\ABTest\combined.json', 'w', ) as f:
     json.dump(d2, f, ensure_ascii=False, indent=4)

更新2:

我让它成功了。应答部分更新的工作代码。

EN

回答 1

Stack Overflow用户

发布于 2022-06-28 13:07:27

好的,我现在有后续的工作。它可以帮助人们研究类似的问题。

代码语言:javascript
复制
import json

# input file for d1
with open("D:\ABTest\source.json", encoding='utf-8') as f:
    d1 = json.load(f)

# input file for d2
with open("D:\ABTest\\target.json", encoding='utf-8') as f:
    d2 = json.loads(f)

# output file
with open('D:\ABTest\\target.json', 'w', ) as f:
    # update values in d2 with values from d1
    for key in d2:
        try:
            # raise an KeyError if d1 doesn't have the key
            d2[key] = d1[key]
        except KeyError:
            pass

    json.dump(d2, f, ensure_ascii=False, indent=4)

print(d2)

消除if语句,并将其替换为try...except...块,使代码更具有pythonic和表演性。

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

https://stackoverflow.com/questions/72785953

复制
相关文章

相似问题

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