在Azure Data Factory中生成含动态Key的JSON文件的技术问询
Azure Data Factory 动态生成以CSV ID列为Key的JSON结构
问题说明
现有CSV数据如下:
| ID | userId | Name |
|---|---|---|
| 719A070E-4874-E811-9CCE-02152146006A | 123 | Joe |
| 5d7d0a74-f1b9-483a-8e9f-c7f45ccfeda0 | 456 | Mike |
需要生成如下结构的JSON:
[ { "719A070E-4874-E811-9CCE-02152146006A": { "userId": "123", "Name": "Joe" } }, { "5d7d0a74-f1b9-483a-8e9f-c7f45ccfeda0": { "userId": "456", "Name": "Mike" } } ]
已能生成包含userId和Name的内层JSON,但无法将CSV的ID列设为外层动态Key,以下是解决方法:
解决步骤
1. 创建映射数据流并连接CSV数据源
在Azure Data Factory中新建映射数据流,添加CSV数据集作为源,确认源数据能正确读取ID、userId、Name三列。
2. 添加派生列生成动态Key的对象
添加派生列转换,创建一个新列(例如命名为DynamicObject),使用以下表达式构造以ID为Key的对象:
@createMap(ID, createMap('userId', userId, 'Name', Name))
这个表达式会将每一行的ID作为外层Key,同时把userId和Name打包成内层对象。
3. 聚合生成JSON数组
添加聚合转换,在「分组依据」中选择不分组(留空即可),然后添加一个聚合列(例如命名为ResultArray),使用collect()函数将所有行的DynamicObject收集为数组:
@collect(DynamicObject)
4. 配置Sink输出JSON
添加接收器,选择JSON数据集作为输出目标:
- 在接收器设置中,将「输出格式」设为数组;
- 确保输出列选择聚合后的
ResultArray列。
运行数据流后,即可得到目标格式的JSON文件。
内容的提问来源于stack exchange,提问作者Pathrudu
相关产品推荐
相关产品推荐

