如何基于Field A字段合并JSON对象中的可变字段?
合并相同Field A的JSON对象字段
需求说明
现有一组JSON对象,每个对象包含共同字段Field A,以及可变字段Variable Field A或Variable Field B。需要将同一Field A对应的所有可变字段合并到同一个对象中。
原始输入JSON
[{ "Field A": "ABC", "Variable Field A": "66" }, { "Field A": "DEF", "Variable Field A": "70" }, { "Field A": "GHI", "Variable Field A": "135" }, { "Field A": "JKL", "Variable Field A": "19" }, { "Field A": "ABC", "Variable Field B": "-729" }, { "Field A": "GHI", "Variable Field B": "962" }, { "Field A": "DEF", "Variable Field B": "334" }, { "Field A": "JKL", "Variable Field B":"241" }]
目标输出JSON
[{ "Field A": "ABC", "Variable Field A": "66", "Variable Field B": "-729" }, { "Field A": "DEF", "Variable Field A": "70", "Variable Field B": "334" }, { "Field A": "GHI", "Variable Field A": "135", "Variable Field B": "962" }, { "Field A": "JKL", "Variable Field A": "19", "Variable Field B": "241" }]
实现方法
核心思路是用字典/映射表以Field A的值为键,存储每个分组的合并对象。遍历原始数组时,将每个对象的字段合并到对应分组的对象中,最后将字典的值转为数组即可得到结果。以下是两种常用语言的实现:
JavaScript 实现
const originalData = [ {"Field A": "ABC", "Variable Field A": "66"}, {"Field A": "DEF", "Variable Field A": "70"}, {"Field A": "GHI", "Variable Field A": "135"}, {"Field A": "JKL", "Variable Field A": "19"}, {"Field A": "ABC", "Variable Field B": "-729"}, {"Field A": "GHI", "Variable Field B": "962"}, {"Field A": "DEF", "Variable Field B": "334"}, {"Field A": "JKL", "Variable Field B":"241"} ]; // 用映射表分组存储合并后的对象 const mergedMap = {}; originalData.forEach(item => { const key = item["Field A"]; // 若分组不存在,初始化基础对象 if (!mergedMap[key]) { mergedMap[key] = {"Field A": key}; } // 合并当前对象的所有可变字段 Object.keys(item).forEach(field => { if (field !== "Field A") { mergedMap[key][field] = item[field]; } }); }); // 将映射表的值转为数组,得到最终结果 const mergedData = Object.values(mergedMap); console.log(JSON.stringify(mergedData, null, 2));
Python 实现
import json original_data = [ {"Field A": "ABC", "Variable Field A": "66"}, {"Field A": "DEF", "Variable Field A": "70"}, {"Field A": "GHI", "Variable Field A": "135"}, {"Field A": "JKL", "Variable Field A": "19"}, {"Field A": "ABC", "Variable Field B": "-729"}, {"Field A": "GHI", "Variable Field B": "962"}, {"Field A": "DEF", "Variable Field B": "334"}, {"Field A": "JKL", "Variable Field B": "241"} ] merged_map = {} for item in original_data: key = item["Field A"] if key not in merged_map: merged_map[key] = {"Field A": key} # 合并所有非Field A的字段 for field, value in item.items(): if field != "Field A": merged_map[key][field] = value # 转换为数组并输出 merged_data = list(merged_map.values()) print(json.dumps(merged_data, indent=2))
扩展说明
这个方法不仅适用于Variable Field A和Variable Field B,如果后续新增其他可变字段,只要属于同一Field A,都会自动合并到对应对象中,兼容性较强。
内容的提问来源于stack exchange,提问作者Tarun Sai
相关产品推荐
相关产品推荐

