Azure ADF Dataflow:将非数组结构的Survey JSON转换为行列格式
Azure Dataflow 处理动态键JSON转表格方案
针对你遇到的API返回JSON中questions是动态键对象而非数组的问题,不用Flatten,改用Unpivot转换配合字段提取即可实现需求,具体步骤如下:
1. 源数据接入
确保Dataflow的源已正确连接到API返回的数据集,确认questions字段被识别为Object类型。
2. 用Unpivot拆分动态键为行
添加Unpivot转换,配置如下:
- 选择要Unpivot的列:
questions - 勾选「Unpivot all columns」(因为QID键是动态的,无法指定固定列)
- 设置输出列:
- 键列:命名为
QuestionId(对应原来的QIDXX) - 值列:命名为
QuestionDetails(对应每个QID下的问题JSON对象)
- 键列:命名为
这一步会把单个Survey数据拆分为N行(N为问题数量),每行对应一个问题,同时保留原Survey的所有字段(如SurveyId、SurveyName等)。
3. 提取问题详情字段
添加Derived Column转换(或Select转换),从QuestionDetails对象中提取需要的字段,比如:
questionText = QuestionDetails.questionTextquestionType = QuestionDetails.type
(根据实际JSON结构调整字段路径)
4. 清理与输出
用Select转换移除不需要的中间列(比如QuestionDetails),确保最终列包含:SurveyId、QuestionId、questionText、questionType等目标字段。
最后通过Sink转换将数据写入目标SQL表。
示例效果
原始JSON片段:
{ "SurveyId": "SURV001", "SurveyName": "客户满意度调查", "questions": { "QID01": {"questionText": "您的满意度如何?", "type": "评分"}, "QID02": {"questionText": "是否推荐给他人?", "type": "是非"} } }
转换后目标表数据:
| SurveyId | SurveyName | QuestionId | questionText | questionType |
|---|---|---|---|---|
| SURV001 | 客户满意度调查 | QID01 | 您的满意度如何? | 评分 |
| SURV001 | 客户满意度调查 | QID02 | 是否推荐给他人? | 是非 |
内容的提问来源于stack exchange,提问作者Hakryn
相关产品推荐
相关产品推荐

