使用 JOLT 需要使用 If Then Else 条件转换 JSON 对象
With JOLT need to Transform JSON object with If Then Else Condition
下面是我的输入Json
[
{
"correlationId": "12345",
"payloadFormat": "Money",
"payload": {
"DE35": "123654ABC54678",
"DE45": "898454PQR54678"
}
}
]
我需要以这种方式对这个 json 进行 Trnsaform 如果 DE35 具有子字符串 6-9 的值,则在转换 Json 中取 DE35 值,如果 DE35 没有值则取 DE45转换中的值 Json.
所以如果 DE35 可用则输出将是
[ {
"COR_ID" : "12345",
"payloadFormat" : "Money",
"EXT_SERV_CD":"ABC"
} ]
如果 DE35 不可用则输出应该是
[ {
"COR_ID" : "12345",
"payloadFormat" : "Money",
"EXT_SERV_CD":"PQR"
} ]
我正在使用 Below JOLT 规范进行转换,但它不起作用。
[
{
"operation": "shift",
"spec": {
"*": {
"@": "&",
"payload": {
"DE|DE35": "&2.payload.TMPDE35"
}
}
}
}, {
"operation": "modify-default-beta",
"spec": {
"*": {
"payload": {
"DE35Val": "=substring(@(1,TMPDE35), 6, 9)"
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"@": "&",
"payload": {
"DE|DE45": "&2.payload.TMPDE45"
}
}
}
}, {
"operation": "modify-default-beta",
"spec": {
"*": {
"payload": {
"DE45Val": "=substring(@(1,TMPDE45), 6, 9)"
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"correlationId": "[&1].COR_ID",
"payloadFormat": "[&1].payloadFormat",
"payload": {
"DE35Val": {
"ABC": {
"DE35Val": "[#3].payload.EXT_SERV_CD"
},
"false": {
"DE45Val": "[#3].payload.EXT_SERV_CD"
}
}
}
}
}
}
]
请指出我哪里出错了。
此规范应该适合您
[
{
"operation": "modify-default-beta",
"spec": {
"*": {
"TmpDE35": "=substring(@(1,payload.DE35), 6, 9)",
"TmpDE45": "=substring(@(1,payload.DE45), 6, 9)"
}
}
},
{
"operation": "modify-default-beta",
"spec": {
"*": {
"Tmp35_45": "=concat(@(1,TmpDE35), @(1,TmpDE45))"
}
}
},
{
"operation": "modify-default-beta",
"spec": {
"*": {
"EXT_SERV_CD": "=substring(@(1,Tmp35_45), 0, 3)"
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": "[&1].&",
"Tmp*": null,
"payload": null
}
}
}
]
解决思路:
- 将
DE35
、DE45
字段的子串移动到TmpDE35
、TmpDE45
- 连接
TmpDE35
、TMPDE45
并存储在Tmp35_45
中。如果 TmpE35
为空,则前 3 个字符将来自 TmpDE45
- 获取子串
Tmp35_45
- 清理,转移
下面是我的输入Json
[
{
"correlationId": "12345",
"payloadFormat": "Money",
"payload": {
"DE35": "123654ABC54678",
"DE45": "898454PQR54678"
}
}
]
我需要以这种方式对这个 json 进行 Trnsaform 如果 DE35 具有子字符串 6-9 的值,则在转换 Json 中取 DE35 值,如果 DE35 没有值则取 DE45转换中的值 Json.
所以如果 DE35 可用则输出将是
[ {
"COR_ID" : "12345",
"payloadFormat" : "Money",
"EXT_SERV_CD":"ABC"
} ]
如果 DE35 不可用则输出应该是
[ {
"COR_ID" : "12345",
"payloadFormat" : "Money",
"EXT_SERV_CD":"PQR"
} ]
我正在使用 Below JOLT 规范进行转换,但它不起作用。
[
{
"operation": "shift",
"spec": {
"*": {
"@": "&",
"payload": {
"DE|DE35": "&2.payload.TMPDE35"
}
}
}
}, {
"operation": "modify-default-beta",
"spec": {
"*": {
"payload": {
"DE35Val": "=substring(@(1,TMPDE35), 6, 9)"
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"@": "&",
"payload": {
"DE|DE45": "&2.payload.TMPDE45"
}
}
}
}, {
"operation": "modify-default-beta",
"spec": {
"*": {
"payload": {
"DE45Val": "=substring(@(1,TMPDE45), 6, 9)"
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"correlationId": "[&1].COR_ID",
"payloadFormat": "[&1].payloadFormat",
"payload": {
"DE35Val": {
"ABC": {
"DE35Val": "[#3].payload.EXT_SERV_CD"
},
"false": {
"DE45Val": "[#3].payload.EXT_SERV_CD"
}
}
}
}
}
}
]
请指出我哪里出错了。
此规范应该适合您
[
{
"operation": "modify-default-beta",
"spec": {
"*": {
"TmpDE35": "=substring(@(1,payload.DE35), 6, 9)",
"TmpDE45": "=substring(@(1,payload.DE45), 6, 9)"
}
}
},
{
"operation": "modify-default-beta",
"spec": {
"*": {
"Tmp35_45": "=concat(@(1,TmpDE35), @(1,TmpDE45))"
}
}
},
{
"operation": "modify-default-beta",
"spec": {
"*": {
"EXT_SERV_CD": "=substring(@(1,Tmp35_45), 0, 3)"
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": "[&1].&",
"Tmp*": null,
"payload": null
}
}
}
]
解决思路:
- 将
DE35
、DE45
字段的子串移动到TmpDE35
、TmpDE45
- 连接
TmpDE35
、TMPDE45
并存储在Tmp35_45
中。如果TmpE35
为空,则前 3 个字符将来自TmpDE45
- 获取子串
Tmp35_45
- 清理,转移