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

如何在DataWeave中使用变量作为JSON对象的选择项?

DataWeave中使用变量动态选择对象属性的解决方案

你遇到的问题核心是:DataWeave的深度选择器..默认识别字面量属性名,直接写inPayload..testWithProperty会去查找名为testWithProperty的属性,而非变量testWithProperty的值对应的属性,因此返回null。

以下是两种可行的解决方法:

方法1:将变量转为Key类型后使用深度选择器

这是最贴合你原有写法的方案,只需把变量转换为Key类型,就能让深度选择器识别它对应的属性名:

%dw 2.0

var testWithProperty = p('incoming.var')
// incoming.var  refers to the value "resultSet"

var inPayload = [
    resultSet: {
        id: "some Id"
    },
    resultSet: {
        id: "some other Id"
    }
]

output application/json
---
{
    "result1": inPayload..resultSet,
    "result2": inPayload .. (testWithProperty as Key)
}

方法2:动态属性访问结合数组迭代

如果你的场景不需要跨层级深度选择,也可以用数组map配合动态属性访问,再通过flatten合并结果:

%dw 2.0

var testWithProperty = p('incoming.var')
// incoming.var  refers to the value "resultSet"

var inPayload = [
    resultSet: {
        id: "some Id"
    },
    resultSet: {
        id: "some other Id"
    }
]

output application/json
---
{
    "result1": inPayload..resultSet,
    "result2": flatten(inPayload map ($[testWithProperty]))
}

两种方法运行后都会得到你期望的输出:

{
  "result1": [
    {
      "id": "some Id"
    },
    {
      "id": "some other Id"
    }
  ],
  "result2": [
    {
      "id": "some Id"
    },
    {
      "id": "some other Id"
    }
  ]
}

补充说明:如果属性存在多层嵌套,方法1的.. (testWithProperty as Key)依然生效,它会遍历所有层级匹配对应Key的属性,和字面量属性名的深度选择行为完全一致。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:02:44