使用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
相关产品推荐
相关产品推荐

