Mule 2.0中如何提取键值对并存储至Object Store V2
处理Object Store v2批量存储员工键值对的问题
问题背景
需求是遍历输入Payload,将所有EMPNAME作为键、EMPID作为值存储到Object Store v2中。当前使用的DataWeave代码生成对象数组,无法直接批量存入Object Store,需调整代码并明确后续操作步骤。
输入Payload
{ "application": "salesforce", "payload": [ { "EMPLASTNAME": "Jane", "EMPFIRSTNAME": "Adams", "EMPEMAIL": "Adams456@isasnap.com", "EMPID": 12345, "EMPNAME": "e76543" }, { "EMPLASTNAME": "Stella", "EMPFIRSTNAME": "Benedict", "EMPEMAIL": "Benedict564@isasnap.com", "EMPID": 67896, "EMPNAME": "e34896" }, { "EMPLASTNAME": "Cooper", "EMPFIRSTNAME": "Jake", "EMPEMAIL": "Cooper133@isasnap.com", "EMPID": 98765, "EMPNAME": "e11356" } ] }
原DataWeave代码及输出
原代码:
%dw 2.0 output application/json --- ((payload.payload map { ($.EMPNAME): $.EMPID }))
输出结果(对象数组,不适用于批量存储):
[ { "e76543": 12345 }, { "e34896": 67896 }, { "e11356": 98765 } ]
第一步:修正DataWeave代码生成单对象键值对
将数组中的多个对象合并为单个对象,方便后续批量操作:
%dw 2.0 output application/json --- payload.payload reduce ((item, accumulator = {}) -> accumulator ++ {(item.EMPNAME): item.EMPID})
修正后的输出(包含所有键值对的单个对象):
{ "e76543": 12345, "e34896": 67896, "e11356": 98765 }
第二步:存入变量并批量更新Object Store v2
方式一:先存变量再批量存储
- 设置变量:添加
Set Variable组件,变量名设为empIdMap,值引用上述DataWeave的输出结果(即payload)。 - 批量存入Object Store:使用
Object Store v2组件的Put All操作,在Entries字段中填写vars.empIdMap,即可一次性将所有键值对存入Object Store。
方式二:直接在Object Store组件中使用DataWeave
无需额外变量,直接在Object Store v2的Put All操作的Entries字段中写入以下DataWeave表达式:
payload.payload reduce ((item, accumulator = {}) -> accumulator ++ {(item.EMPNAME): item.EMPID})
注意事项
- 确保Object Store v2实例已正确配置,且允许存储对应类型的键值(比如键名长度、值的类型匹配等)。
- Put All操作会默认覆盖Object Store中已存在的同名键,若需避免覆盖,可提前添加键存在性检查逻辑。
内容的提问来源于stack exchange,提问作者Sunny85
相关产品推荐
相关产品推荐

