如何提取多值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
相关产品推荐
相关产品推荐

