You need to enable JavaScript to run this app. 如何提取多值XML标签内嵌JSON字符串中的pid值并完成拼接
优惠活动
大模型
产品
解决方案
定价
更多

如何提取多值XML标签内嵌JSON字符串中的pid值并完成拼接

正确实现代码(DataWeave 2.0)

%dw 2.0
output application/json
---
{
    listOfPids: (
        (payload.xml."custom-attributes".*"custom-attribute" filter ($.@"attribute-id" == "status"))[0].*value[1] 
        read "application/json"
        .status.*products flatMap $.*pid
    ) joinBy ", "
}

原代码问题说明

你之前的代码错误使用了flatten函数,筛选custom-attribute后得到的数组第一个元素就是目标节点,无需扁平化处理,直接取该节点的*value数组就能拿到两个嵌套JSON的标签内容。
另外使用flatMap + .*pid的写法可以自动收集所有嵌套层级的pid值,不需要手动指定数组下标,后续新增package或products节点也能正常适配。

带容错的扩展版本

可处理value不存在、JSON解析失败的异常场景:

%dw 2.0
output application/json
import * from dw::Runtime
---
{
    listOfPids: try(() -> {
        let targetAttr = (payload.xml."custom-attributes".*"custom-attribute" filter ($.@"attribute-id" == "status"))[0]
        let jsonVal = targetAttr.*value[1] read "application/json"
        ---
        jsonVal.status.*products flatMap $.*pid joinBy ", "
    }) orElse ""
}

运行输出结果

{
  "listOfPids": "0000444, 0000111"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:57:03