如何通过Jolt Transform匹配Key并提取对应数组元素的Value?
Jolt转换匹配key提取value问题解决
问题说明
现有如下输入JSON:
{ "reason": { "id": 1234, "value": "Date changed", "key": "2124" }, "updatedEntity": [ { "key": "2124", "value": "US california" }, { "key": "2123", "value": "Dallas" }, { "key": "2122", "value": "Texas" } ] }
需要通过Jolt Transform实现:将reason对象的key与updatedEntity数组中对象的key匹配,提取匹配成功的对象的value,输出格式如下:
{ "payload" :"US california" }
用户编写的Jolt规则未能生效:
[ { "operation": "shift", "spec": { "reason": { "key": "reasonKey" }, "updatedEntity": { "*": { "key": { "reasonKey": { "@(2,value)": "payload" } } } } } } ]
正确解决方案
使用以下Jolt转换规则即可实现需求:
[ { "operation": "shift", "spec": { "reason": { "key": "matchKey" }, "updatedEntity": { "*": { "key": { "@(3,matchKey)": { "@(2,value)": "payload" } } } } } } ]
规则说明
之前的规则错误在于直接用字符串"reasonKey"作为匹配条件,而非引用已提取的reasonKey的实际值。修改后逻辑如下:
- 先将
reason.key提取为matchKey; - 遍历
updatedEntity数组时,用@(3,matchKey)获取上层的matchKey值,与当前对象的key做匹配; - 匹配成功时,通过
@(2,value)取到当前对象的value,赋值给payload。
内容的提问来源于stack exchange,提问作者vinayak gupta
相关产品推荐
相关产品推荐

