Mule中使用DataWeave提取JSON键名失败问题求助
解决DataWeave中遍历对象时获取键名而非索引的问题
我懂你的困扰!你本来想提取输入JSON的键名作为key字段的值,但用map遍历对象时,$$返回的是数组索引而不是原对象的键名——这是因为map本质是用来遍历数组的,当你对JSON对象使用map时,DataWeave会自动把对象的所有值转换成一个数组(比如你的输入会变成["val2", "val3", "val4", "val5", "val6"]),所以$$在这里就成了数组的索引值。
正确的解决方案:使用pluck操作符
pluck是DataWeave专门为遍历对象键值对设计的操作符,它会直接返回包含键($$)和值($)的结构数组,完美匹配你的需求。修改后的代码如下:
%dw 2.0 output application/json --- { "someOtherKey": "val", properties: { entry: payload pluck { key: $$, value: $ } } }
另一种方法:通过keySet()遍历键名
如果你更喜欢显式遍历键名数组,也可以用keySet()获取所有键名,再通过键名取值:
%dw 2.0 output application/json --- { "someOtherKey": "val", properties: { entry: payload.keySet() map { key: $, value: payload[$] } } }
验证结果
不管用哪种方法,运行后都会得到你期望的输出:
{ "someOtherKey": "val", "properties": { "entry": [ { "key": "key2", "value": "val2" }, { "key": "key3", "value": "val3" }, { "key": "key4", "value": "val4" }, { "key": "key5", "value": "val5" }, { "key": "key6", "value": "val6" } ] } }
内容的提问来源于stack exchange,提问作者Balwant Kumar Singh
相关产品推荐
相关产品推荐

