如何通过Jolt转换将items的folderId替换为对应folders的name
Jolt转换解决方案:替换items的folderId为匹配文件夹名称
输入示例
{ "folders": [ { "id": "folder_1", "name": "文档文件夹" }, { "id": "folder_2", "name": "图片文件夹" } ], "items": [ { "id": "item_1", "folderId": "folder_1" }, { "id": "item_2", "folderId": "folder_2" }, { "id": "item_3", "folderId": "folder_1" } ] }
期望输出
{ "folders": [ { "id": "folder_1", "name": "文档文件夹" }, { "id": "folder_2", "name": "图片文件夹" } ], "items": [ { "id": "item_1", "folderId": "文档文件夹" }, { "id": "item_2", "folderId": "图片文件夹" }, { "id": "item_3", "folderId": "文档文件夹" } ] }
可行Jolt规则
[ { "operation": "shift", "spec": { "folders": { "*": { "id": "folderMap.&", "name": "folderMap.&" } }, "items": "items", "*": "&" } }, { "operation": "shift", "spec": { "items": { "*": { "id": "items.[&1].id", "folderId": { "@(2,folderMap.&)": "items.[&1].folderId" } } }, "folders": "folders", "*": "&" } }, { "operation": "remove", "spec": { "folderMap": "" } } ]
规则解析
第一步:构建文件夹键值映射
通过shift操作把folders数组转换成folderMap对象,以文件夹的id为键、name为值,方便后续快速匹配。同时保留原items数组和其他顶层字段。第二步:替换folderId字段
遍历items数组的每个元素:- 保留
id字段不变; - 用
@(2,folderMap.&)语法,向上两层获取folderMap,并以当前folderId的值为键取出对应的文件夹名称,替换原folderId字段。
- 保留
第三步:清理临时数据
通过remove操作删除临时生成的folderMap对象,得到最终结构。
内容的提问来源于stack exchange,提问作者namtab
相关产品推荐
相关产品推荐

