使用Jolt将嵌套对象列表转换为带根项的数组
Jolt Transform:将嵌套变量对象展开为单条记录数组
需求描述
将包含嵌套variables对象的JSON数组输入,转换为每个变量对应一条记录,同时携带原分组的id(重命名为groupId)和name(重命名为groupName)的JSON数组输出。
输入示例
[ { "id": 100, "name": "group name", "variables": { "var1": { "value": "val1" }, "var2": { "value": "val2" } } }, { "id": 101, "name": "group name 2", "variables": { "var1": { "value": "val1" } } } ]
输出示例
[ { "groupId": 100, "groupName": "group name", "name": "var1", "value": "val1" }, { "groupId": 100, "groupName": "group name", "name": "var2", "value": "val2" }, { "groupId": 101, "groupName": "group name 2", "name": "var1", "value": "val1" } ]
Jolt转换规范
[ { "operation": "shift", "spec": { "*": { "variables": { "*": { "@2,id": "groupId", "@2,name": "groupName", "$": "name", "value": "value" } } } } }, { "operation": "shift", "spec": { "*": { "*": "[#2].&" } } } ]
转换逻辑说明
第一个
shift操作:- 遍历原数组的每个分组元素(
*),再遍历分组内variables对象的所有变量键(*)。 @2,id:向上回溯2级(跳过当前变量和variables层),获取分组的id值,映射为groupId。@2,name:同理,获取分组的name值,映射为groupName。$:取当前变量的键名(如var1),映射为name字段。value:直接提取变量对象中的value值。
- 遍历原数组的每个分组元素(
第二个
shift操作:- 将第一步生成的扁平化结构重新整理为数组格式,
[#2].&表示把每个变量的属性集合到对应的数组元素中,最终形成预期的多条记录数组。
- 将第一步生成的扁平化结构重新整理为数组格式,
内容的提问来源于stack exchange,提问作者Christian Demers
相关产品推荐
相关产品推荐

