请求生成符合指定规则的JOLT转换规格说明
正确JOLT转换方案实现
需求说明
转换规则如下:
- 若
risk值为"0",则risklevel设为"Low" - 若
risk值为null,则risklevel保持null - 若
risk值为"1",则risklevel设为"High"
同时保留原数据中的name、age、location字段。
输入示例
[ { "name": "Manu", "age": 26, "location": "New York", "risk": "0" }, { "name": "Manju", "age": 29, "location": "New York city", "risk": null } ]
期望输出
[ { "name": "Manu", "age": 26, "location": "New York", "risklevel": "Low" }, { "name": "Manju", "age": 29, "location": "New York city", "risklevel": null } ]
原JOLT规格的问题
- Shift操作中对
null值的处理错误,"null": null无法正确将null赋值给risklevel - 后续的
default操作会把未生成risklevel的字段设为字符串"null",而非原生null类型 modify-overwrite-beta操作强制将risklevel转为字符串,导致原生null被转为"null"字符串,完全不符合需求
正确的JOLT转换规格
[ { "operation": "shift", "spec": { "*": { "name": "[&1].name", "age": "[&1].age", "location": "[&1].location", "risk": { "0": { "#Low": "[&2].risklevel" }, "1": { "#High": "[&2].risklevel" }, "null": { "@": "[&2].risklevel" } } } } } ]
规格说明
这个单一的shift操作即可完成所有需求:
- 遍历数组中的每个元素(
"*"),直接映射name、age、location到对应索引的目标对象中 - 对
risk字段做分支匹配:- 匹配到
"0"时,用#Low生成固定值"Low"作为risklevel - 匹配到
"1"时,用#High生成固定值"High"作为risklevel - 匹配到
null时,通过@引用当前的null值,直接赋值给risklevel,保留原生null类型
- 匹配到
&2用于回溯到数组元素的层级,确保risklevel被赋值到正确的数组对象中
内容的提问来源于stack exchange,提问作者Manjunath k
相关产品推荐
相关产品推荐

