跳到主内容
UniKit

JSON转SQL

把 JSON 数据转换成 SQL INSERT 语句:自动取字段并集、可生成建表语句,支持 MySQL / PostgreSQL / SQLite 的标识符引用与字符串转义。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

转换设置

字段取所有对象的并集;字符串里的单引号会翻倍,MySQL 还会转义反斜杠;对象与数组序列化成 JSON 字符串。

生成结果

这个工具能做什么

  • 把接口返回的 JSON、导出的小批量数据快速变成可执行的 INSERT 语句,省掉手写字段名和转义的功夫。
  • 给新表灌测试数据:字段名取所有对象的并集,缺字段自动写 NULL,不用先对齐每一行的结构。
  • 需要建表时勾选「生成 CREATE TABLE」,会按取值推断 INT / DOUBLE / TINYINT(1) / JSON / TEXT,直接得到能跑通的 DDL + DML。
  • 要在 MySQL、PostgreSQL、SQLite 之间搬运脚本时,用方言开关切换标识符引用与字符串转义规则。

示例

输入

[{"id":1,"name":"O'Brien","active":true},{"id":2,"name":"Ada","active":false}]

输出

INSERT INTO `users` (`id`, `name`, `active`) VALUES
  (1, 'O''Brien', TRUE),
  (2, 'Ada', FALSE);

MySQL 方言下标识符用反引号;字符串里的单引号按 SQL 标准翻倍,反斜杠会被额外转义。

常见问题

数组里的对象字段不一致怎么办?

字段名取所有对象的并集,按首次出现的顺序排列;某一行没有这个键时写 NULL(可以关掉「缺失字段写 NULL」,改成 DEFAULT)。多出来的字段不会丢,只是排到后面。

字符串里的单引号和反斜杠会怎么处理?

单引号一律翻倍写成 '',这是 SQL 标准写法,三种方言都认。反斜杠只在 MySQL 下再翻倍一次,因为 MySQL 默认把反斜杠当转义引导符;PostgreSQL 的 standard_conforming_strings 默认为 on,SQLite 也不把反斜杠当转义符,所以这两者保持原样。

嵌套对象和数组怎么进数据库?

整体序列化成 JSON 字符串再用单引号包起来。MySQL 的 JSON 列、PostgreSQL 的 JSONB 列可以直接吃下这种字面量;如果目标列是 TEXT,也会原样存成 JSON 文本。

生成的 INSERT 可以一次插很多行吗?

默认把多行合并成一条 INSERT ... VALUES (...), (...) 语句,这是各数据库都支持、执行也最快的写法。行数特别多时可以取消勾选,改成每行一条语句,方便分批复用或跳过出错的行。

为什么表名或字段名里的点被拆开了?

表名按点拆成 schema.table 后逐段加引用符,所以写 public.users 会得到 "public"."users"。如果字段名本身含点,它会作为一个整体被引用,不会被拆开。

关键词:json to sqlinsert statementsql generatorcreate tablemysqlpostgresqlsqliteJSON转SQL生成 INSERT建表语句数据导入

同类工具