DataWeave表达式返回冗余数组:如何修改以获取目标结构?
问题:DataWeave数组结构扁平化处理
原DataWeave表达式
"extension": [ { "url": "insurance-product/link", "valueUrl": inObject.InsuranceProductLink }, // 注:原表达式此处多了一个多余的}, 已修正 flatten(vars.contactPoints filter ($.InsuranceProductId == inObject.InsuranceProductId) map (item, index) -> { extension: [ { url: "gatekeeper", valueBoolean: item.ContactPointIsGatekeeper }, { url: "rank", valuePositiveInt: item.ContactPointRank }, { url: "contact", valueReference: { reference: "todo" } }, { url: "type", valueCode: item.ContactPointType } ] }) ]
当前输出(不符合预期)
"extension": [ { "url": "insurance-product/link", "valueUrl": "redacted" }, [ { "extension": [ { "url": "gatekeeper", "valueBoolean": false }, { "url": "rank", "valuePositiveInt": 3 }, { "url": "contact", "valueReference": { "reference": "todo" } }, { "url": "type", "valueCode": "app" } ] }, { "extension": [ { "url": "gatekeeper", "valueBoolean": true }, { "url": "rank", "valuePositiveInt": 2 }, { "url": "contact", "valueReference": { "reference": "todo" } }, { "url": "type", "valueCode": "general-practitioner" } ] } ] ]
期望输出
"extension": [ { "url": "insurance-product/link", "valueUrl": "redacted" }, { "extension": [ { "url": "gatekeeper", "valueBoolean": false }, { "url": "rank", "valuePositiveInt": 3 }, { "url": "contact", "valueReference": { "reference": "todo" } }, { "url": "type", "valueCode": "app" } ] }, { "extension": [ { "url": "gatekeeper", "valueBoolean": true }, { "url": "rank", "valuePositiveInt": 2 }, { "url": "contact", "valueReference": { "reference": "todo" } }, { "url": "type", "valueCode": "general-practitioner" } ] } ]
解决方案
问题核心是原表达式将flatten(...)的结果作为外层extension数组的单个嵌套元素,而非将子数组内的每个对象直接加入外层数组。只需在flatten(...)前添加数组展开运算符...,同时修正原表达式的语法错误即可。
修改后的DataWeave表达式
"extension": [ { "url": "insurance-product/link", "valueUrl": inObject.InsuranceProductLink }, ...flatten(vars.contactPoints filter ($.InsuranceProductId == inObject.InsuranceProductId) map (item, index) -> { extension: [ { url: "gatekeeper", valueBoolean: item.ContactPointIsGatekeeper }, { url: "rank", valuePositiveInt: item.ContactPointRank }, { url: "contact", valueReference: { reference: "todo" } }, { url: "type", valueCode: item.ContactPointType } ] }) ]
原理说明
...是DataWeave的数组展开运算符,作用是将目标数组的元素直接插入当前数组的对应位置,避免嵌套数组的产生。- 原
flatten已确保处理后的结果为一维数组,配合...就能将每个contactPoint对应的对象直接加入外层extension数组,完全匹配期望结构。
内容的提问来源于stack exchange,提问作者xeraphim
相关产品推荐
相关产品推荐

