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
相关产品推荐
相关产品推荐

