You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:44:25