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文本存储。

功能特性

如何使用 JSON转SQL工具

  1. 粘贴一个由对象组成的JSON数组
  2. 为表命名并选择数据库方言
  3. 如有需要,调整每条INSERT语句包含的行数
  4. 复制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中双写的引号,正是让这段脚本保持有效的关键。

常见错误与故障排除

常见问题

字段类型是怎么从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 工具