基于嵌套parameters匹配规则合并JSON对象数组的方法
基于Parameters属性匹配合并JSON对象列表
需求概述
我有一个大型JSON对象列表,需要将其中满足匹配条件的对象合并,生成新的对象列表。核心匹配依据是每个对象嵌套的parameters属性,与system_info无关。
匹配规则
- 两个对象的共享parameters键对应的键值必须完全一致
- 某一对象的parameters包含额外键不影响匹配(只要双方共有的键值全部相同,即判定匹配成功)
合并规则
匹配成功的对象合并为一个新对象:
parameters取两者的键值对并集(保留所有键,因匹配时共享键值一致,不会出现键值冲突)system_info取两者的键值对并集(保留所有键值对)
示例演示
初始两个对象
对象1:
{ "parameters": { "Global Region": "Estonia", "Building Typology": "Office", "Building Age": "Old", "Energy Performance": "Poor" }, "system_info": { "Envelope Type": "Low-Performance-Envelope-Old", "u-value_floor": 1.1, "u-value_wall": 1.8, "u-value_window": 3.2, "u-value_roof": 1, "g_value%": 0.7, "infiltration @50pa_m3/h.m2_facade area": 8 } }
对象2:
{ "parameters": { "Global Region": "Estonia", "Building Typology": "Office" }, "system_info": { "Ventilation Type": "Mid-Eff-Mech-Vent-WOHR-Old", "HR_efficiency": "NONE", "Supplyfan_w-HR_SFP_W/m3/s": "NONE", "Returnfan_w-HR_SFP_W/m3/s": "NONE", "Supplyfan_w/o-HR_SFP_W/m3/s": 2500, "Returnfan_w/o-HR_SFP_W/m3/s": 2300, "Reference": "EN 13779 with degradation assumption" } }
第一次合并结果
两个对象共享的parameters键(Global Region、Building Typology)值完全一致,合并后:
{ "parameters": { "Global Region": "Estonia", "Building Typology": "Office", "Building Age": "Old", "Energy Performance": "Poor" }, "system_info": { "Envelope Type": "Low-Performance-Envelope-Old", "u-value_floor": 1.1, "u-value_wall": 1.8, "u-value_window": 3.2, "u-value_roof": 1, "g_value%": 0.7, "infiltration @50pa_m3/h.m2_facade area": 8, "Ventilation Type": "Mid-Eff-Mech-Vent-WOHR-Old", "HR_efficiency": "NONE", "Supplyfan_w-HR_SFP_W/m3/s": "NONE", "Returnfan_w-HR_SFP_W/m3/s": "NONE", "Supplyfan_w/o-HR_SFP_W/m3/s": 2500, "Returnfan_w/o-HR_SFP_W/m3/s": 2300, "Reference": "EN 13779 with degradation assumption" } }
加入第三个对象后的合并
新增对象:
{ "parameters": { "Global Region": "Estonia", "Building Typology": "Office", "DHW Source": "Elec", "Building Age": "Old", "Energy Performance": "Poor" }, "system_info": { "DHW Type": "Low-Eff-Elec-Boiler-Old", "DHW_efficiency": 0.75 } }
该对象与已合并对象的共享parameters键值全部一致,合并后:
{ "parameters": { "Global Region": "Estonia", "Building Typology": "Office", "Building Age": "Old", "Energy Performance": "Poor", "DHW Source": "Elec" }, "system_info": { "Envelope Type": "Low-Performance-Envelope-Old", "u-value_floor": 1.1, "u-value_wall": 1.8, "u-value_window": 3.2, "u-value_roof": 1, "g_value%": 0.7, "infiltration @50pa_m3/h.m2_facade area": 8, "Ventilation Type": "Mid-Eff-Mech-Vent-WOHR-Old", "HR_efficiency": "NONE", "Supplyfan_w-HR_SFP_W/m3/s": "NONE", "Returnfan_w-HR_SFP_W/m3/s": "NONE", "Supplyfan_w/o-HR_SFP_W/m3/s": 2500, "Returnfan_w/o-HR_SFP_W/m3/s": 2300, "Reference": "EN 13779 with degradation assumption", "DHW Type": "Low-Eff-Elec-Boiler-Old", "DHW_efficiency": 0.75 } }
加入第四个对象后的结果
新增对象:
{ "parameters": { "Global Region": "Estonia", "Building Typology": "Office", "DHW Source": "Gas", "Building Age": "Old", "Energy Performance": "Poor" }, "system_info": { "DHW Type": "Low-Eff-Elec-Boiler-Old", "DHW_efficiency": 0.1 } }
该对象与已合并对象的共享parameters键值一致,但DHW Source为新增键且值不同,无法与现有合并对象匹配,生成新的合并对象:
{ "parameters": { "Global Region": "Estonia", "Building Typology": "Office", "Building Age": "Old", "Energy Performance": "Poor", "DHW Source": "Gas" }, "system_info": { "Envelope Type": "Low-Performance-Envelope-Old", "u-value_floor": 1.1, "u-value_wall": 1.8, "u-value_window": 3.2, "u-value_roof": 1, "g_value%": 0.7, "infiltration @50pa_m3/h.m2_facade area": 8, "Ventilation Type": "Mid-Eff-Mech-Vent-WOHR-Old", "HR_efficiency": "NONE", "Supplyfan_w-HR_SFP_W/m3/s": "NONE", "Returnfan_w-HR_SFP_W/m3/s": "NONE", "Supplyfan_w/o-HR_SFP_W/m3/s": 2500, "Returnfan_w/o-HR_SFP_W/m3/s": 2300, "Reference": "EN 13779 with degradation assumption", "DHW Type": "Low-Eff-Elec-Boiler-Old", "DHW_efficiency": 0.1 } }
内容的提问来源于Stack Exchange,提问作者Tluther
相关产品推荐
相关产品推荐

