如何用JOLT提取动态键数组中的消息并拼接为错误信息
JOLT处理动态键下的错误消息拼接
需求
从WebService返回的JSON中,提取data字段内所有动态键对应的数组消息,将这些消息拼接为单个错误字符串;同时保留顶层message字段到body.info_message。
原始返回数据
{ "success": false, "message": "Eroare validare date", "data": { "driver.0.name": [ "Trebuie să menționați nume/denumire pentru șofer" ], "driver.1.name": [ "Trebuie să menționați nume/denumire pentru șofer" ], "driver.1tin": [ "CNP/CUI invalid pentru șofer" ], "vehicle.card": [ "Serie CIV invalidă pentru vehiculul asigurat" ] } }
原JOLT Spec问题
原Spec中使用#1会生成固定值,无法提取数组内的实际错误消息,且层级映射逻辑需要调整。
正确JOLT转换方案
[ { "operation": "shift", "spec": { "message": "body.info_message", "data": { "*": { "*": "body.error_message[]" } } } }, { "operation": "modify-overwrite-beta", "spec": { "body": { "error_message": "=join(', ', @(1,error_message))" } } } ]
转换说明
- Shift阶段:
- 直接映射顶层
message到body.info_message - 用
*匹配data下所有动态键,再通过第二个*遍历每个键对应的数组元素,将所有元素收集到body.error_message数组中
- 直接映射顶层
- Modify阶段:
- 使用
join函数将error_message数组的元素用,拼接为单个字符串
- 使用
转换结果
{ "body": { "info_message": "Eroare validare date", "error_message": "Trebuie să menționați nume/denumire pentru șofer, Trebuie să menționați nume/denumire pentru șofer, CNP/CUI invalid pentru șofer, Serie CIV invalidă pentru vehiculul asigurat" } }
内容的提问来源于stack exchange,提问作者caputz
相关产品推荐
相关产品推荐

