ADF读取Blob Storage中JSON时Schema Inference检测到格式错误如何解决
ADF解析Blob存储JSON数组报错解决方案
报错原因
你使用的是标准JSON数组结构,报错是因为ADF默认FAILFAST解析模式对换行、前置逗号的格式敏感度较高,自动schema推断时触发了格式校验异常。
解决方法
方案1:调整解析配置(无需修改源文件,优先推荐)
- 数据集JSON格式选择
Array of Documents,匹配你外层为数组的JSON结构 - 找到解析设置中的
Parse Mode选项,将默认值FAILFAST修改为PERMISSIVE,该模式会优先解析有效字段,不会因小的格式兼容问题直接抛出异常 - 若在数据流中使用,额外在源转换的JSON设置中开启
Allow comments、Allow trailing commas选项,进一步提升格式兼容性
方案2:调整源JSON格式(配置调整无效时使用)
如果调整配置后仍报错,是因为你当前JSON的每个数组元素使用了换行+前置逗号的写法,少数场景下ADF解析器识别异常,可以改成以下两种兼容格式:
- 压缩为单行无多余换行的数组,匹配
Array of Documents模式:
[{"Bid":0.197514880839,"BaseCurrency":"AED"},{"Bid":0.535403560434,"BaseCurrency":"AUD"},{"Bid":0.351998712241,"BaseCurrency":"BBD"},{"Bid":0.573128306234,"BaseCurrency":"CAD"},{"Bid":0.787556605631,"BaseCurrency":"CHF"},{"Bid":0.0009212964,"BaseCurrency":"CLP"},{"Bid":0.115389497248,"BaseCurrency":"DKK"}]
- 移除外层数组括号,每个JSON对象单独占一行,匹配
Document Per Line模式:
{"Bid":0.197514880839,"BaseCurrency":"AED"} {"Bid":0.535403560434,"BaseCurrency":"AUD"} {"Bid":0.351998712241,"BaseCurrency":"BBD"} {"Bid":0.573128306234,"BaseCurrency":"CAD"} {"Bid":0.787556605631,"BaseCurrency":"CHF"} {"Bid":0.0009212964,"BaseCurrency":"CLP"} {"Bid":0.115389497248,"BaseCurrency":"DKK"}
方案3:手动指定Schema解析
如果不想修改源文件,可在数据流中先读取文件完整内容,再用fromJson函数手动解析,跳过自动schema推断步骤,示例表达式:
fromJson(toString(input()), 'array<struct<Bid: double, BaseCurrency: string>>')
额外校验点
确认Blob存储中的JSON文件为UTF-8无BOM编码,带BOM头的文件也会触发解析异常。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

