如何在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
相关产品推荐
相关产品推荐

