如何编写JOLT Transformation规则实现数组拆分与关联重组?
JOLT转换规则实现需求
输入JSON
{ "data": { "attribute": [ { "name": "Name_1", "code": "TT01" }, { "name": "Name_2", "code": "TT02" }, { "name": "Name_3", "code": "TT03" }, { "name": "Name_4", "code": "TT04-1" }, { "name": "Name_5", "code": "TT04-2" } ], "data": [ { "indicator": "abc", "value": [ "1", "2", "3", "4", "5" ] }, { "indicator": "def", "value": [ "6", "7", "8", "9", "10" ] } ] } }
期望输出JSON
[ { "indicator": "abc", "name": "Name_1", "value": "1" }, { "indicator": "abc", "name": "Name_2", "value": "2" }, { "indicator": "abc", "name": "Name_3", "value": "3" }, { "indicator": "abc", "name": "Name_4", "value": "4" }, { "indicator": "abc", "name": "Name_5", "value": "5" }, { "indicator": "def", "name": "Name_1", "value": "6" }, { "indicator": "def", "name": "Name_2", "value": "7" }, { "indicator": "def", "name": "Name_3", "value": "8" }, { "indicator": "def", "name": "Name_4", "value": "9" }, { "indicator": "def", "name": "Name_5", "value": "10" } ]
JOLT转换规则
[ { "operation": "shift", "spec": { "data": { "data": { "*": { "indicator": "&2_&1.indicator", "value": { "*": "&3_&2.&1.value" } } }, "attribute": { "*": { "name": "&2_&1.name" } } } } }, { "operation": "shift", "spec": { "*": { "indicator": "[&1].indicator", "name": "[&1].name", "value": "[&1].value" } } }, { "operation": "shift", "spec": { "*": "" } } ]
规则解释
第一步Shift操作:
- 按数组索引关联
indicator、对应位置的value元素,以及attribute里的name元素,生成带索引标识的键(如data_0_0),每个键下存储对应位置的字段数据,确保位置一一对应。 - 用
&2_&1这类占位符保留层级索引,避免数据错位。
- 按数组索引关联
第二步Shift操作:
- 将第一步生成的带索引的键,转换为数组对象结构,把同一索引下的
indicator、name、value合并到单个对象中。
- 将第一步生成的带索引的键,转换为数组对象结构,把同一索引下的
第三步Shift操作:
- 移除外层多余的索引键,直接输出最终的数组结果。
内容的提问来源于stack exchange,提问作者Duc Nguyen
相关产品推荐
相关产品推荐

