JOLT:基于字段值合并两个数组的JSON转换需求
JOLT转换方案:根据作者ID关联合并图书数据
输入JSON
{ "body": { "authors": [ { "ID": 1, "name": "Hans", "timeStamp": "2020-01-01T00:57:36+00:00" }, { "ID": 2, "name": "Peter", "timeStamp": "2020-01-01T01:00:15+00:00" } ], "releases": { "bookdata": [ { "bookname": "bla", "authorID": 1 }, { "bookname": "blub", "authorID": 2 } ] } } }
期望输出JSON
{ "body": { "releases": { "bookdata": [ { "bookname": "bla", "authorName": "Hans", "authorTimeStamp": "2020-01-01T00:57:36+00:00" }, { "bookname": "blub", "authorName": "Peter", "authorTimeStamp": "2020-01-01T01:00:15+00:00" } ] } } }
JOLT转换规则
[ { "operation": "shift", "spec": { "body": { "authors": { "*": { "ID": "body.authorsMap.&", "name": "body.authorsMap.&.authorName", "timeStamp": "body.authorsMap.&.authorTimeStamp" } }, "releases": "body.releases" } } }, { "operation": "shift", "spec": { "body": { "releases": { "bookdata": { "*": { "bookname": "body.releases.bookdata.[&1].bookname", "authorID": { "@(3,authorsMap.&)": "body.releases.bookdata.[&2]" } } } } } } }, { "operation": "remove", "spec": { "body": { "authorsMap": "" } } } ]
规则说明
- 第一步(shift操作):把authors数组转成以作者ID为键的
authorsMap对象,同时将原作者的name重命名为authorName、timeStamp重命名为authorTimeStamp,保留原releases数据。 - 第二步(shift操作):遍历bookdata数组,保留每个元素的
bookname,再通过authorID关联authorsMap里对应的作者信息,合并到当前bookdata元素中。 - 第三步(remove操作):删除临时生成的
authorsMap对象,得到最终目标结构。
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

