如何在JSONata代码中实现正确的嵌套分组?
JSONata 三层嵌套分组实现方案
实现逻辑
通过$group()函数逐层嵌套分组:先按lspf_numlot做最外层分组,再在每个分组内按IDFase二次分组,最后在IDFase分组内按prop_attrezzatura完成最终分组,同时可按需添加聚合逻辑。
示例代码
原始数据示例
[ {"lspf_numlot": "Lot1", "IDFase": "FaseA", "prop_attrezzatura": "Tool1", "value": 10}, {"lspf_numlot": "Lot1", "IDFase": "FaseA", "prop_attrezzatura": "Tool1", "value": 20}, {"lspf_numlot": "Lot1", "IDFase": "FaseB", "prop_attrezzatura": "Tool2", "value": 15}, {"lspf_numlot": "Lot2", "IDFase": "FaseA", "prop_attrezzatura": "Tool1", "value": 5} ]
JSONata分组代码
$group( $, "lspf_numlot", function($lotGroup) { { "lspf_numlot": $lotGroup.lspf_numlot, "faseGroups": $group( $lotGroup, "IDFase", function($faseGroup) { { "IDFase": $faseGroup.IDFase, "attrezzaturaGroups": $group( $faseGroup, "prop_attrezzatura", function($attGroup) { { "prop_attrezzatura": $attGroup.prop_attrezzatura, "totalValue": $sum($attGroup.value), // 可替换为计数、平均值等聚合操作 "detailItems": $attGroup // 保留原始条目,不需要可删除 } } ) } } ) } } )
代码说明
- 第一层分组:以
lspf_numlot为键对整个数据集分组,每个分组作为参数传入外层回调函数。 - 第二层分组:在每个
lspf_numlot分组内,用IDFase再次分组,生成faseGroups数组。 - 第三层分组:在每个
IDFase分组内,用prop_attrezzatura做最终分组,同时通过$sum()等函数实现数据聚合。
输出结果示例
[ { "lspf_numlot": "Lot1", "faseGroups": [ { "IDFase": "FaseA", "attrezzaturaGroups": [ { "prop_attrezzatura": "Tool1", "totalValue": 30, "detailItems": [ {"lspf_numlot": "Lot1", "IDFase": "FaseA", "prop_attrezzatura": "Tool1", "value": 10}, {"lspf_numlot": "Lot1", "IDFase": "FaseA", "prop_attrezzatura": "Tool1", "value": 20} ] } ] }, { "IDFase": "FaseB", "attrezzaturaGroups": [ { "prop_attrezzatura": "Tool2", "totalValue": 15, "detailItems": [ {"lspf_numlot": "Lot1", "IDFase": "FaseB", "prop_attrezzatura": "Tool2", "value": 15} ] } ] } ] }, { "lspf_numlot": "Lot2", "faseGroups": [ { "IDFase": "FaseA", "attrezzaturaGroups": [ { "prop_attrezzatura": "Tool1", "totalValue": 5, "detailItems": [ {"lspf_numlot": "Lot2", "IDFase": "FaseA", "prop_attrezzatura": "Tool1", "value": 5} ] } ] } ] } ]
内容的提问来源于stack exchange,提问作者Gippy73
相关产品推荐
相关产品推荐

