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

DataWeave过滤XML中SUPP开头字段的代码问题排查

DataWeave代码问题排查:筛选SUPP开头字段返回空的解决方法

输入XML

<screenFields>
    <ScreenFieldDTO>
        <fieldName>SUPP1</fieldName>
        <value>123</value>
    </ScreenFieldDTO>
    <ScreenFieldDTO>
        <fieldName>MAKE1</fieldName>
        <value>ABC</value>
    </ScreenFieldDTO>
    <ScreenFieldDTO>
        <fieldName>SUPP2</fieldName>
        <value>234</value>
    </ScreenFieldDTO>
    <ScreenFieldDTO>
        <fieldName>NORM2</fieldName>
        <value>TXT2</value>
    </ScreenFieldDTO>
    <ScreenFieldDTO>
        <fieldName>SUPP3</fieldName>
        <value>124</value>
    </ScreenFieldDTO>
</screenFields>

期望输出JSON

{
    "suppliers": [
        {"fieldname" : "SUPP1", "value": "123"},
        {"fieldname" : "SUPP2", "value": "234"},
        {"fieldname" : "SUPP3", "value": "124"}
    ]
}

注:你给出的期望JSON存在语法错误(对象直接包含数组不符合JSON规范),这里调整为数组放在suppliers键下,符合标准JSON结构。

你的问题代码

%dw 2.0
output application/json
fun filterSupplier(val) = if(val startsWith("SUPP")) "SUPP" else ""
---
{
"fieldname": payload.screenFields.*ScreenFieldDTO filter $.fieldName == 
 (filterSupplier($.fieldName))
}

问题分析

  1. 筛选逻辑错误:filterSupplier函数在字段名以SUPP开头时返回字符串"SUPP",但你用$.fieldName == filterSupplier($.fieldName)做判断,相当于拿完整字段名(如SUPP1)和"SUPP"做相等比较,永远不会匹配,导致筛选结果为空。
  2. 输出结构不匹配:你将筛选结果放在fieldname键下,但期望输出是包含目标数组的对象,且原代码未对字段名做大小写转换(期望是小写fieldname)。
  3. 未正确映射字段:没有将原XML中的fieldName和value映射为期望的键值结构。

修正后的代码

简化版(直接使用startsWith判断)

%dw 2.0
output application/json
---
{
    suppliers: payload.screenFields.*ScreenFieldDTO 
        filter $.fieldName startsWith "SUPP" 
        map {
            fieldname: $.fieldName,
            value: $.value
        }
}

修复函数版(保留你的filterSupplier函数并修正逻辑)

%dw 2.0
output application/json
fun filterSupplier(val) = val startsWith "SUPP"
---
{
    suppliers: payload.screenFields.*ScreenFieldDTO 
        filter filterSupplier($.fieldName) 
        map {
            fieldname: $.fieldName,
            value: $.value
        }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:30:53