ADF Collection Reference单XML记录转JSON失败问题求助
解决方案:ADF Collection Reference处理单条XML转JSON报错问题
问题原因
当XML中仅含单条<row>节点时,ADF将XML转换为JSON后,row会被解析为JSON对象而非数组;多条<row>节点则会被解析为数组。Collection Reference要求配置的JSON路径必须指向数组类型,因此单条记录时路径$['file-data']['files']['row']因指向对象触发UserErrorInvalidPathForCollectionReferenceNode错误。
可行解决方案
方案1:用array()函数强制转数组
直接修改Collection Reference的JSON路径表达式,通过array()函数将目标节点强制转为数组,兼容单/多记录场景:
array($['file-data']['files']['row'])
此方法无需额外组件,快速解决路径不匹配问题。
方案2:Mapping Data Flow预处理
若需更复杂的转换逻辑,可通过Mapping Data Flow处理XML源:
- 添加Source组件,接入XML数据源
- 添加Derived Column组件,创建新列(或替换原
row列),用表达式toArray(row)将单条对象转为数组 - 添加Sink组件输出为JSON,后续Collection Reference可正常识别数组路径
方案3:强制XML转JSON的节点类型
在Copy Activity的XML源配置中,通过自定义规则指定<row>节点为数组:
进入源设置的高级JSON配置,添加规则:
{"$['file-data']['files']['row']": {"type": "array"}}
强制该节点解析为数组,避免单条记录时被转为对象。
示例验证
- 单条XML输入:
<file-data> <files> <row> <id>1</id> <name>file1</name> </row> </files> </file-data>
使用方案1的路径表达式后,转换后的JSON符合预期:
{ "file-data": { "files": { "row": [ { "id": "1", "name": "file1" } ] } } }
内容的提问来源于stack exchange,提问作者nick leeson
相关产品推荐
相关产品推荐

