基于共同ID过滤两个Payload数组失败,如何实现动态匹配?
解决Payload动态匹配的问题
首先你的代码和表达式存在几处需要修正的问题,以下是具体的解决方案:
1. 修复Payload的语法错误
原payload2里有两处语法问题会导致解析失败:
- 字符串值
Boston未加引号,需改为"Boston" - 以
0开头的数字0986在JSON/JS中会被识别为无效八进制数,建议改为字符串类型"id": "0986"或去掉前导0写成id: 986
修正后的完整Payload代码:
var payload1 = [{ "name": "kate", "number1": 12345 }] var payload2 = [ { "nameD": "kate P ", "id": 12345, "addres": "Boston" }, { "nameD": "John P ", "id": 986, "address" : "New Jork" } ]
2. 修正DataWeave过滤表达式
你的表达式核心问题是**payload1是数组结构**,直接用payload1."number1"无法正确获取目标值,必须先定位到数组内的第一个对象,再提取number1属性。
修正后的DataWeave表达式:
%dw 2.0 output application/json --- payload2 filter ($.id == payload1[0].number1) map { id: $.id, nameD: $.nameD }
效果说明
payload1[0].number1准确获取到第一个Payload里的number1值(12345)filter遍历payload2,筛选出id与目标值匹配的条目map提取筛选结果中需要的id和nameD字段
运行后会输出正确结果:
[ { "id": 12345, "nameD": "kate P " } ]
内容的提问来源于stack exchange,提问作者Anonim
相关产品推荐
相关产品推荐

