概述
JSON 为半结构化文本格式,读取时按对象的 key 解析为字段。JSON 文件不带独立的 schema 声明,字段名由 key 自动生成,字段类型由用户在任务中声明;嵌套的 object 与 array 结构不做展开,按 JSON 字符串整体保留。本文介绍 JSON 格式在 DataBuddy 数据接入中的支持能力、参数设置与类型转换规则。
支持的能力
支持的参数设置
以下为任务级参数,在数据同步模式下配置于任务的读取节点。
参数 | 说明 | 是否必填 | 默认值 |
文件类型 | 选择 JSON | 是 | TXT |
编码 | utf8 / gbk | 是 | utf8 |
压缩格式 | none / deflate / gzip / bzip2 / lz4 / snappy;snappy 仅支持 hadoop-snappy 与 framing-snappy 两种 stream format | 是 | none |
JSON 为按 key 解析的格式,字段分隔符、行分隔符、Quote character、跳过表头不适用,不在任务中展示。
说明:
JSON 的字段名按对象 key 自动生成,无需用户填写;如需调整目标字段名或类型,可在字段映射组件中修改。
支持的类型转换
JSON 不带类型声明,读取时按 key 取值后,由用户声明的目标类型决定转换结果:
JSON 值类型 | 可声明的目标类型 | 说明 |
string | STRING / DATE | 声明为 DATE 时必须填写日期格式,如 yyyy-MM-dd HH:mm:ss |
number(整数) | LONG / DOUBLE / STRING | 通常为 LONG |
number(浮点) | DOUBLE / STRING | — |
boolean | BOOLEAN / STRING | — |
object / array | STRING | 不展开嵌套结构,按 JSON 字符串整体读取 |
字段类型的缺省值为
STRING。所有可声明类型为:STRING、LONG、DOUBLE、BOOLEAN、DATE。说明:
同一任务读取的所有文件视为同一张逻辑表,须适配同一套 schema。不同 JSON 文件的 key 不一致时,缺失 key 的字段按空值处理,schema 冲突的记录进入脏数据处理链路。
常见问题
Q:嵌套的 object / array 会被展开成多个字段吗?
A:不会。嵌套结构不做展开,整体按 JSON 字符串读取,目标类型固定为 STRING。如需展开嵌套字段,请在目标端进行二次处理。
Q:字段名可以修改吗?
A:字段名由对象的 key 自动生成,无需填写;如需调整目标字段名或类型,可在字段映射组件中修改。
Q:不同文件的 key 不一致会怎样?
A:同一任务读取的所有文件视为同一张逻辑表。缺失 key 的字段按空值处理,schema 冲突的记录进入脏数据处理链路。
Q:为什么没有字段分隔符、行分隔符、Quote character、跳过表头的配置?
A:JSON 按对象的 key 解析字段,以上按分隔符切分的参数不适用,因此不在任务中展示。
Q:JSON 的字段类型如何确定?
A:JSON 不带类型声明,读取时按 key 取值,由用户声明的目标类型决定转换结果;缺省为 STRING。
Q:压缩格式应该怎么选?
A:需与文件实际的外层压缩方式保持一致;选择 snappy 时,仅支持 hadoop-snappy 与 framing-snappy 两种 stream format。