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

Python 2.7 JSON数据反序列化及字段覆盖问题求助

解决Python 2.7中JSON动态数据提取与字段覆盖问题

嘿,我来帮你搞定这个问题!你遇到的核心难点是动态处理JSON里的非固定键名,不过好在你的源数据和目标字典的键都是按序号规律命名的,咱们可以利用这个规律来灵活提取数据。

第一步:读取并解析JSON输入文件

首先用Python 2.7内置的json模块读取并反序列化你的输入文件,这一步很直接:

import json

# 替换成你的JSON文件路径
with open('input_data.json', 'r') as json_file:
    # 反序列化JSON到Python字典
    source_data = json.load(json_file)

# 提取Test节点下的所有测试数据(这是咱们要用到的核心数据)
test_collection = source_data["Group"]["Test"]

第二步:动态提取数据并覆盖目标字典字段

假设你已经有了目标字典target_dict(就是你提到的包含subs的那个字典),现在可以根据需求选择对应的test数据来填充:

场景1:用test1的数据填充subs的第1项

如果只需要一组x/y值,直接提取test1的x1和y1:

# 选中test1的数据
selected_test = test_collection["test1"]

# 覆盖subs["1"]的width和height
target_dict["subs"]["1"]["video_info"]["width"] = selected_test["x1"]
target_dict["subs"]["1"]["video_info"]["height"] = selected_test["y1"]

场景2:用test3的3组数据填充subs的1、2、3项

当需要多组数据时,咱们可以通过字符串拼接生成动态键名,把subs的编号和test里的xN/yN对应起来:

# 选中test3的数据
selected_test = test_collection["test3"]

# 遍历subs的编号(这里是1、2、3)
for sub_id in ["1", "2", "3"]:
    # 生成对应的x、y键名,比如sub_id是"2",就生成"x2"、"y2"
    x_key = "x{}".format(sub_id)
    y_key = "y{}".format(sub_id)
    
    # 安全检查:确保选中的test里有对应的键,避免KeyError
    if x_key in selected_test and y_key in selected_test:
        target_dict["subs"][sub_id]["video_info"]["width"] = selected_test[x_key]
        target_dict["subs"][sub_id]["video_info"]["height"] = selected_test[y_key]
    else:
        print("警告:选中的测试数据中不存在{}或{}键".format(x_key, y_key))

扩展:灵活适配不同test的多组数据

这个逻辑可以轻松适配test2(2组)或test4(4组)的情况,只需要调整循环的sub_id范围就行。比如要用test4填充4个sub项,就把循环改成for sub_id in ["1", "2", "3", "4"]。

这样不管源JSON里的test有多少组x/y值,都能自动对应到目标字典的subs项里,完美解决你说的“固定键示例不适用”的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:49