能否用Azure Data Factory复制项将嵌套XML映射为嵌套JSON?
将一级嵌套XML转换为带重复数组的JSON(Blob源场景)
这个需求完全可以实现。Copy Activity的默认映射机制无法处理重复XML元素转JSON数组的场景,推荐通过以下两种方案完成转换:
方案一:使用Azure Data Factory Data Flow(无代码/低代码)
步骤1:配置XML源数据集
创建Blob存储的XML数据集,在数据集设置中指定Root element为RootElement,确保数据读取时能正确识别顶层结构。
步骤2:创建Data Flow并接入源
新建Data Flow,添加XML源组件并关联上述数据集,确认数据预览能正确加载所有字段(包括重复的RootRepeatingElement)。
步骤3:用Aggregate转换处理重复元素
添加Aggregate转换:
- 在Group by区域选择非重复的顶层字段
RootChild,以此作为聚合分组依据。 - 在Aggregate columns区域新增列,命名为
RootRepeatingElement,使用表达式collect(RootRepeatingElement)将所有重复的子元素收集为数组。
步骤4:配置JSON目标数据集
创建Blob存储的JSON数据集,设置输出模式为Array of objects,确保最终输出符合目标JSON的结构要求。
步骤5:运行Pipeline
将Data Flow添加到Pipeline中执行,即可生成符合要求的JSON文件。
方案二:Python脚本方案(自定义处理)
如果需要更灵活的控制,可以用Python脚本读取Blob中的XML,解析后转换为目标JSON:
import xmltodict import json from azure.storage.blob import BlobServiceClient # 初始化Blob客户端 conn_str = "你的Blob存储连接字符串" container_name = "你的容器名称" blob_service_client = BlobServiceClient.from_connection_string(conn_str) container_client = blob_service_client.get_container_client(container_name) # 读取XML文件 input_blob = container_client.get_blob_client("input.xml") xml_raw = input_blob.download_blob().readall().decode("utf-8") # 解析XML,强制将指定重复元素转为数组 parsed_data = xmltodict.parse(xml_raw, force_list={"RootRepeatingElement"}) # 提取顶层内容并生成JSON output_json = json.dumps(parsed_data["RootElement"], indent=2) # 写入JSON到Blob output_blob = container_client.get_blob_client("output.json") output_blob.upload_blob(output_json, overwrite=True)
内容的提问来源于stack exchange,提问作者user7395346
相关产品推荐
相关产品推荐

