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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:47:10