Azure Synapse复制活动中OData API $count反序列化问题
解决使用/$count API时Copy Activity的JSON反序列化错误
问题原因
调用带/$count后缀的API时,返回的响应通常是纯数字值(比如42),而非标准的JSON对象/数组结构。Copy Activity默认会将响应按JSON格式解析,纯数字不符合JSON对象的语法要求,因此触发反序列化错误:
"Error occurred when deserializing source JSON file ''. Check if the data is in valid JSON object format."
解决方案
方案1:用Web Activity替代Copy Activity获取计数
如果只是需要获取计数用于后续验证,无需通过Copy Activity传递数据,直接用Web Activity即可:
- 配置Web Activity调用目标
/$countAPI,确保请求参数和权限正确。 - 后续步骤中直接引用Web Activity的输出值,比如用表达式
@activity('GetCount').output获取纯数字计数,用于和目标数据的行数做对比验证。
方案2:修改Copy Activity源为文本格式
如果必须用Copy Activity传递计数,需调整源的格式配置:
- 在Copy Activity的源设置中,将数据集的格式从
JSON切换为Text。 - 这样Copy Activity会将API返回的纯数字当作纯文本读取,不会尝试JSON反序列化。
- 若后续需要将文本转为数值,可使用表达式
@int(activity('CopyCount').output)进行类型转换。
方案3:校验API响应的Content-Type
部分/$count API返回的Content-Type为text/plain而非application/json,需确保Copy Activity的源配置匹配响应类型:
- 在REST链接服务或源数据集的高级设置中,确认响应格式设置为文本,避免强制按JSON解析。
排查要点
- 先用Postman/浏览器直接调用
/$countAPI,确认返回的是纯数字,无额外JSON包裹(比如{"count":123}是JSON对象,不会报错,但纯数字会)。 - 检查Copy Activity的源数据集配置,确保没有误选JSON格式,切换为Text格式即可解决核心问题。
内容的提问来源于stack exchange,提问作者Anoop M
相关产品推荐
相关产品推荐

