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

使用DataWeave将XML转换为JSON并实现元数据键名与行值映射的技术问询

DataWeave实现XML到目标JSON格式转换

刚好遇到过类似的场景,用DataWeave可以完美实现你要的映射转换。先明确一下需求:把XML中<metadata>下<item>的name属性作为JSON对象的键,对应<data>下每个<row>里的<value>值,最终输出包含available数组的JSON结构。

XML输入数据

<dataset>
  <metadata>
    <item name="id" type="xs:int"/>
    <item name="name" type="xs:string"/>
    <item name="description" type="xs:string"/>
    <item name="time" type="xs:string"/>
  </metadata>
  <data>
    <row>
      <value>7</value>
      <value>varsha</value>
      <value>ads</value>
      <value>10</value>
    </row>
    <row>
      <value>8</value>
      <value>dhal</value>
      <value>dd</value>
      <value>09</value>
    </row>
  </data>
</dataset>

预期JSON输出

{
  "available": [
    {
      "id": 7,
      "name": "varsha",
      "description": "ads",
      "time": "10"
    },
    {
      "id": 8,
      "name": "dhal",
      "description": "dd",
      "time": "09"
    }
  ]
}

DataWeave转换代码

%dw 2.0
output application/json
---
{
  available: payload.dataset.data.row map (row) -> {
    (payload.dataset.metadata.item map ((item, index) -> {
      (item.@name): if (item.@type == "xs:int") row.value[index] as Number else row.value[index]
    }))
  }
}

代码逻辑解释

  • 首先通过payload.dataset.metadata.item获取所有字段的名称(name属性)和对应类型
  • 遍历每个<row>节点,将行内的<value>列表与字段名列表按索引一一匹配
  • 根据type属性做类型转换:如果是xs:int就转为数字类型,其他情况保持字符串格式
  • 用括号()展开映射后的键值对,组合成单个对象后,统一收集到available数组中

这样运行代码就能得到你想要的JSON结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:23:15