如何在Jolt中根据条件实现特定字符串拼接逻辑
如何在Jolt中根据条件实现特定字符串拼接逻辑
看起来你需要根据accountType的值动态拼接key和relationship字段,同时还要把category映射成指定编码(比如"Father"对应"0001")。我来拆解这个需求,给你提供对应的Jolt转换方案。
核心规则梳理
先把需求明确成可落地的规则:
key字段:如果accountType是Admin,则格式为{id}~{accountType};否则直接使用{id}relationship字段:如果accountType是Admin,格式为{id}~{accountType}~{category编码};否则为{id}~{category编码}- 固定映射:
"Father"对应编码"0001"
Jolt转换规范
我们可以用modify-overwrite-beta结合条件判断、字符串拼接,再加上lookup处理编码映射来实现:
[ { "operation": "modify-overwrite-beta", "spec": { // 先把category映射为对应编码,后续可扩展更多映射规则 "categoryCode": { "Father": "0001" }, // 根据accountType动态拼接key "key": "=concat(@(1,id), #(ifElse(@(1,accountType) == 'Admin', '~Admin', '')))", // 先临时生成relationship(后续会替换原始字段) "tempRelationship": "=concat(@(1,id), #(ifElse(@(1,accountType) == 'Admin', '~Admin', '')), '~', @(1,categoryCode))" } }, { "operation": "shift", "spec": { // 保留需要的字段,用临时值替换原始relationship "key": "key", "tempRelationship": "relationship" } } ]
场景验证
场景1:accountType为Admin的输入
输入JSON:
{ "accountType": "Admin", "id": "aaab-ccc-ddd-eeeAAA", "relationship": "DIRECT", "accountInfo": { "partyTypeCode": "PARTNER", "source": "Facebbok", "internalAccount": true, "category": "Father" } }
转换后输出:
{ "key": "aaab-ccc-ddd-eeeAAA~Admin", "relationship": "aaab-ccc-ddd-eeeAAA~Admin~0001" }
场景2:accountType为User的输入
输入JSON:
{ "accountType": "User", "id": "aaab-ccc-ddd-eeeAAA", "relationship": "DIRECT", "accountInfo": { "partyTypeCode": "PARTNER", "source": "Facebbok", "internalAccount": true, "category": "Father" } }
转换后输出:
{ "key": "aaab-ccc-ddd-eeeAAA", "relationship": "aaab-ccc-ddd-eeeAAA~0001" }
额外说明
modify-overwrite-beta里的ifElse函数是实现条件判断的核心,concat负责字符串拼接- 如果后续需要添加更多
category的编码映射,直接在categoryCode里新增键值对即可(比如"Mother": "0002") - 用
shift操作替换原始relationship字段,是为了避免原始值干扰最终结果,确保输出完全符合需求
备注:内容来源于stack exchange,提问作者Rakesh GR
相关产品推荐
相关产品推荐

