如何通过JOLT将字符串格式数组转换为对象数组?
JOLT转换:将字符串格式数组转为结构化对象数组
输入JSON
{"systemName": "[\"R342\",\"EEFCP\",\"SBLLL\",\"NOW\",\"SLLV\",\"CXLX\",\"ES\",\"SC\"]","externalId": "[\"121461\",\"135630\",\"1-23L-270\",\"faa0dd954f452f0087418d9f9310c775\",\"1046\",\"9357\",\"1863899966\",\"00180067670000k7F1FAAU\"]"}
期望输出
{"externalSystemIds": [{"systemName": "R342","systemId": "121461"},{"systemName": "EEFCP","systemId": "135630"},{"systemName": "SBLLL","systemId": "1-23L-270"},{"systemName": "NOW","systemId": "faa0dd954f452f0087418d9f9310c775"},{"systemName": "SLLV","systemId": "1046"},{"systemName": "CXLX","systemId": "9357"},{"systemName": "ES","systemId": "1863899966"},{"systemName": "SC","systemId": "00180067670000k7F1FAAU"}]}
分步JOLT转换规则
第一步:解析字符串格式数组为数组类型
通过字符串拆分、截取、拼接操作,把输入中包裹在字符串里的数组格式内容,转换成真正的数组结构,最后清理临时变量。
[{"operation": "shift","spec": {"externalId": "externalSystemIds.externalId","systemName": "externalSystemIds.systemName"}},{"operation": "modify-overwrite-beta","spec": {"externalSystemIds": {"tempId1": "=split('\"',@(1,externalId))","tempId2": "=join('',@(1,tempId1))","tempId3": "=split(']',@(1,tempId2))","tempId4": "=join('',@(1,tempId3))","tempIdlen": "=size(@(1,tempId4))","tempId5": "=substring(@(1,tempId4),1,@(1,tempIdlen))","externalIds": "=split(',',@(1,tempId5))","tempName1": "=split('\"',@(1,systemName))","tempName2": "=join('',@(1,tempName1))","tempName3": "=split(']',@(1,tempName2))","tempName4": "=join('',@(1,tempName3))","tempNamelen": "=size(@(1,tempName4))","tempName5": "=substring(@(1,tempName4),1,@(1,tempNamelen))","systemNames": "=split(',',@(1,tempName5))"}}},{"operation": "remove","spec": {"externalSystemIds": {"temp*": "","systemName": "","externalId": ""}}}]
第二步:映射数组元素为对象数组
将第一步生成的systemNames和externalIds两个数组,按索引一一配对,组合成externalSystemIds数组中的结构化对象。
[{"operation": "shift","spec": {"externalSystemIds": {"systemNames": {"*": {"@": "externalSystemIds[&1].systemName"}},"externalIds": {"*": {"@": "externalSystemIds[&1].systemId"}}}}}]
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

