JSON转SQL
把JSON数组转换成带有自动推断字段类型的CREATE TABLE语句,以及批量的INSERT语句——支持PostgreSQL、MySQL、SQLite和SQL Server。
JSON转SQL工具完全在你的浏览器中运行。你的数据在你的设备上完成转换,绝不会上传。
打开CSV转SQL工具
关于 JSON转SQL工具
JSON转SQL工具会接收一个对象数组——比如一个API响应、一份导出数据,或者一个测试用的固定数据文件——然后生成把它导入数据库所需要的两类语句:一条CREATE TABLE语句,它的字段类型是根据每一列中所有的值推断出来的;以及若干条批量的INSERT语句,被组织成多行的VALUES列表。类型推断做得很严谨:超过32位的整数会被判定为BIGINT,符合ISO格式的字符串会被判定为TIMESTAMP,字段内数据类型混杂时会安全地退回到TEXT类型,而每一种标准类型都会按目标方言的写法呈现出来——比如BOOLEAN类型在MySQL中会变成TINYINT(1),在SQL Server中则会变成BIT。那些容易让手写脚本出问题的细节,恰恰是这个工具的重点:标识符会按方言正确加上引号,因此名为order的字段名不会与关键字冲突;值中的单引号会被正确地双写转义,保证像O’Brien这样的名字也能安全存入;缺失的字段会被填为NULL;嵌套对象则会被序列化成JSON文本存储。
功能特性
- 根据所有行的数据推断字段类型,而不仅仅是第一行
- 支持设置批量大小的多行INSERT语句
- 支持PostgreSQL、MySQL、SQLite和SQL Server方言
- 按方言正确处理标识符引号——保留字也能安全使用
- 正确转义字段值:双写引号,明确写出NULL
- 缺失字段填为NULL;嵌套结构转换为JSON文本
如何使用 JSON转SQL工具
- 粘贴一个由对象组成的JSON数组
- 为表命名并选择数据库方言
- 如有需要,调整每条INSERT语句包含的行数
- 复制SQL代码——字段类型会先列出供你检查
示例
输入
[{"id":1,"name":"O'Brien","active":true}]
输出
CREATE TABLE "users" ("id" INTEGER, "name" TEXT, "active" BOOLEAN);
INSERT INTO "users" ("id", "name", "active") VALUES (1, 'O''Brien', TRUE);
O’’Brien中双写的引号,正是让这段脚本保持有效的关键。
常见错误与故障排除
- 一个看起来是数字的字段被推断成了TEXT类型。 — 这一列中肯定有某个值实际上是字符串——比如带引号的"42"、空字符串,或者N/A之类的占位值。类型推断会检查每一行的数据,只要出现任何不一致,就会整体退回到TEXT类型。请先清理这些异常值,再重新转换一次。
- 脚本在名为order或user的字段上执行失败。 — 正常情况下不应该失败——标识符正是为了避免这种冲突才按方言加上了引号。如果确实失败了,请检查所选方言是否与目标数据库匹配:反引号对应MySQL,方括号对应SQL Server。
- 日期字段被当作普通文本导入了。 — 只有符合ISO 8601格式的字符串(比如2024-01-15,时间部分可选)才会被推断为TIMESTAMP类型。像15/01/2024这样的本地化格式存在歧义,因此会被有意保留为TEXT类型——请先把它们统一转换成ISO格式。
常见问题
- 字段类型是怎么从JSON数据中推断出来的?
- 一列中的每一个值都会参与“投票”:整数会得出INTEGER类型(超过32位则为BIGINT),只要出现小数就会得出DOUBLE PRECISION类型,true/false会得出BOOLEAN类型,符合ISO格式的日期字符串会得出TIMESTAMP类型,而任何冲突最终都会归为TEXT类型。所有行都会被检查,因此即使后面某一行出现小数,也不会破坏原本已经确定的整数列判断。
- 不同SQL方言之间具体有哪些差异?
- 标识符的引号写法不同(双引号、反引号、方括号),类型的拼写不同(BOOLEAN对比TINYINT(1)对比BIT,DOUBLE PRECISION对比DOUBLE对比FLOAT对比REAL),布尔值字面量不同(TRUE对比1),还有SQL Server在Unicode文本前需要加的N前缀。
- 字段名不同的对象是怎么处理的?
- 生成的列是所有行中出现过的字段名的并集,按首次出现的顺序排列;缺少某个字段的行会在对应位置插入NULL。这正是异构的API数据在导入表格时通常需要采用的处理方式。
- 生成的脚本能直接用于生产环境吗?
- 它已经具备了可以导入数据的条件:引号处理安全,类型推断也比较合理。但生产环境中的数据表仍然需要主键、NOT NULL约束和索引,这些都是仅凭数据推断无法确定的——请先检查一遍字段类型列表,再进一步完善脚本。
相关工具
全部 ArrayKit 工具