You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现按键匹配用源JSON覆盖更新目标JSON文件值

实现目标

匹配两个JSON文件的共有键,用源JSON对应键的值覆盖目标JSON的同键值,全程保留目标JSON的原有键结构。

输入文件说明
  • 源JSON文件(source.json)内容:
{"CLIENT_CODE":"client-d",
    "ARM_SUBSCRIPTION_ID":"abced-edfgh-dk6dkk-97dke",
    "location":"easteurope"}
  • 目标JSON文件(target.json)内容:
{"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"}
预期输出

保留target.json的所有原有键,仅将两文件共有的键值替换为source.json中的对应值,最终结果如下:

{"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"}
排查过程
  • 初版代码缺陷
    初版代码添加了if dataset1.keys() == dataset2.keys()判断,要求两个JSON的键完全一致才会执行更新,由于两个文件键集合不匹配,最终没有任何输出。初版代码如下:
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)
  • 调整后版本的局限
    修改逻辑为遍历源JSON的所有键,判断键存在于目标JSON时就覆盖对应值,此时可以将合并结果写入第三个文件combined.json,但无法直接更新原target.json文件。调整后的代码如下:
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)

更新:已成功实现完整功能,可用的工作代码已同步发布到回答区。

内容的提问来源于stack exchange,提问作者asp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:39:18