JSON 转 SQL

JSON 转 SQL,是把 JSON 数组(每个对象一行记录)按字段对齐成表格,再生成可执行的 INSERT 插入语句的在线工具,适合把接口返回或导出的数据导入 MySQL、PostgreSQL、SQLite、SQL Server 或 Oracle。缺失字段补 NULL,字符串按方言转义,大整数按原文写入不丢精度,还能生成 CREATE TABLE 建表语句。免费、浏览器本地运行,数据不上传。

数据库方言
语句形式
1–1000

MySQL:反斜杠默认双写(服务器默认 sql_mode);MariaDB 同样选 MySQL。

SQL 插入语句

贴入 JSON 数组后自动生成 INSERT 语句

🔒 JSON 在你的浏览器里解析生成,未上传任何服务器;本工具只生成 SQL 脚本文本,不连接数据库、不执行 SQL。建表类型按样本推断,主键与索引请自行补充。

如何使用JSON 转 SQL

1

把 JSON 数组粘贴进左侧输入框,或点「选择文件」读入 .json(本地读取,不上传);接口返回的整包 JSON 也可以,工具会自动找到里面的记录列表,并在结果上方显示「记录来源」供你切换。

2

选数据库方言、填表名(支持 schema.表名),按需打开「生成 CREATE TABLE」「包在事务里」,并设置每条 INSERT 的行数(1–1000,默认 100)。

3

在列清单里取消不需要的列,确认右侧 SQL 与统计条无误后点「复制全部」,或点「下载 .sql」拿到以表名命名的 UTF-8 脚本文件。

关于JSON 转 SQL的常见问题

JSON 转 SQL 会上传我的数据吗
不会。JSON 转 SQL 的解析、对齐与语句生成全部在你自己的浏览器里完成,JSON 不会离开这台设备,关闭页面即清除(页面只加载站点访问统计脚本,它不读取你粘贴的内容)。本机只记住方言、语句形式、每条行数这类生成偏好;JSON 内容、表名、列名与列排除状态一律不保存,因为它们常带业务信息。页面加载完成后断网也能继续粘贴、生成、复制和下载。
手机上能用 JSON 转 SQL 工具吗
可以,纯网页实现,手机浏览器打开就能用,不用装 App、不用注册。窄屏下输入框与 SQL 结果自动上下排列,长 INSERT 语句在代码框里横向滚动,不会把页面撑破。手机上粘贴长 JSON 不方便时,点「选择文件」直接读入手机里的 .json;生成后点「复制全部」,再粘进数据库客户端或发给同事即可。
JSON 转 SQL 支持哪些数据库方言
支持 MySQL、PostgreSQL、SQLite、SQL Server、Oracle 五种,MariaDB 选 MySQL 即可。切换方言时,标识符引号(反引号、双引号或方括号)、字符串转义、布尔写法、建表类型和批量语法都会一起变。例如 SQL Server 的字符串一律带 N 前缀,Oracle 逐行生成 INSERT,PostgreSQL 的 JSON 列建成 JSONB。
JSON 转 SQL 嵌套对象和数组怎么处理
默认把嵌套对象和数组整体存成一个 JSON 字符串,导入后可以用数据库的 JSON 函数再取值。也可以把「嵌套对象」切到「展开为列」,嵌套对象会按「父_子」拼成新列名(分隔符可选下划线或点)。数组始终存 JSON 字符串,因为按下标展开的列数会随数据长短漂移,没法稳定建表。嵌套里的大整数同样按原文保留。
JSON 转 SQL 字段不一致时怎么对齐
所有记录的字段取并集,列顺序按每个字段第一次出现的先后排列,某条记录缺的字段写成 NULL。统计条会显示一共补了多少个 NULL,它只统计「字段缺失」,原本就是 null 的值不计入,方便你判断数据是不是缺得太多。数组里混进去的数字或字符串元素会被跳过,并在提示里写明跳过了几个。
JSON 转 SQL 的单引号和反斜杠会转义吗
会。单引号在五种方言里一律双写,英文名里的撇号会写成两个连续的单引号;MySQL 下反斜杠也会双写(如果你的库开了 NO_BACKSLASH_ESCAPES,把「反斜杠双写」开关关掉即可),PostgreSQL、SQLite、SQL Server、Oracle 的反斜杠原样保留。生成的是一次性导入脚本,业务代码里写库仍应使用参数化查询。
JSON 转 SQL 能自动生成建表语句吗
能。勾选「生成 CREATE TABLE」后,会在 INSERT 之前按数据推断每列类型:整数给 INT 或 BIGINT,小数给 DECIMAL,布尔、日期、日期时间、嵌套 JSON 各有对应类型,字符串按最长值取 VARCHAR 档位。类型是按样本推断的建议值,建表语句上方带注释提醒;主键、索引、NOT NULL 与自增不会替你猜,请按业务补上。
JSON 转 SQL 一条 INSERT 能插多少行
默认每条 INSERT 带 100 行,可以在 1 到 1000 之间调整;数据有 250 行时就会生成 100、100、50 三条语句,最后一条不会留空。上限定在 1000 是因为 SQL Server 单条 VALUES 最多 1000 行。Oracle 在 23ai 之前不支持多行 VALUES,本工具对 Oracle 一律逐行生成。数据很大时,每条行数调小一点也能避开 MySQL 的 max_allowed_packet 限制。
JSON 转 SQL 的大整数会丢精度吗
不会。很多工具先用 JSON.parse 读数据,12345678901234567890 这样的雪花 ID 会被双精度浮点抹成 12345678901234567000;本工具的数字按 JSON 原文直接写进 SQL,不经过 JavaScript 浮点数转换,高精度小数 0.1000000000000000055 也原样保留。超出双精度范围的写法(如 1e400)同样照原文写入,并提示你数据库端可能报溢出。
JSON 转 SQL 支持中文字段名吗
支持。中文、空格、连字符等列名都原样保留,靠方言自己的引号包起来,不会被替换成下划线。空字段名会改成 col_1 这样的名字,超过数据库标识符长度上限的会截断(MySQL 64 字符、PostgreSQL 63 字节),改名的列在列清单里会标出原名。SQL Server 下的中文值自动带 N 前缀,避免落库后变成问号。

JSON 转 SQL 插入语句的功能特点

  • 五种方言一键切换:每种库各有一处要盯的地方。JSON 转 MySQL 插入语句时反斜杠会双写;JSON 转 PostgreSQL INSERT 时嵌套列建成 JSONB;JSON 转 SQLite 时布尔写成 1 / 0;JSON 转 SQL Server 时字符串带 N 前缀;JSON 转 Oracle INSERT 时一律逐行生成。
  • 字段不一致也能对齐:所有记录的字段取并集,缺失的补 NULL,列顺序按首次出现。
  • 转义按方言来:单引号一律双写;MySQL 额外双写反斜杠,PostgreSQL 与 SQLite 不双写;SQL Server 字符串带 N 前缀防中文变问号。
  • 大数字不丢精度:超出 JavaScript 安全整数的数字按原文写进 SQL。
  • 嵌套数据两种处理:嵌套对象存成 JSON 字符串,或展开成「父_子」列。
  • JSON 生成建表语句:相当于 JSON 转 CREATE TABLE,按数据推断 INT、BIGINT、DECIMAL、VARCHAR、DATE、JSON 等列类型。
  • JSON 批量生成 INSERT:每条 INSERT 1–1000 行可调,JSON 数组转 INSERT 时自动分批,避开数据库单条语句上限。

这件事有好几种叫法:JSON 转 INSERT 语句、JSON 生成 SQL,说的都是把一组记录写成 INSERT INTO … VALUES 脚本。最常见的场景是把接口返回的 JSON 导入数据库:整包响应直接贴进来,工具会自动找到 data.list 这类记录数组。要做 JSON 导入 MySQL,生成脚本后在客户端里执行,或在 mysql 命令行用 source 导入 .sql 文件即可。英文语境下这类工具通常叫 JSON to SQL online 或 JSON to INSERT statement,搜 convert JSON to SQL 找到的也是同一件事。JSON 转 SQL 在线生成本质上只是文本处理,解析和拼语句都在浏览器里完成。JSON 转 SQL 不上传数据,所以接口里带手机号、订单号的数据也能直接拿来转。

JSON 转 SQL 五种方言差异对照表

同一份 JSON 生成 SQL,换一个数据库就可能导入报错,问题几乎都出在下面这几列。表里是本工具在各方言下的实际生成口径。

五种数据库方言的 INSERT 生成差异(本工具口径)
方言标识符引号反斜杠布尔单条 VALUES 行数嵌套 JSON 列类型
MySQL`列`双写 \\TRUE / FALSE受 max_allowed_packet 限制JSON
PostgreSQL"列"原样TRUE / FALSE无硬上限JSONB
SQLite"列"原样1 / 0受语句长度限制TEXT
SQL Server[列]原样1 / 01000 行NVARCHAR(MAX)
Oracle"列"原样1 / 0本工具逐行生成CLOB

反斜杠这一列最容易踩坑。同一个值 C:\temp\new,在 MySQL(默认 sql_mode)下要写成双反斜杠,否则 \t 和 \n 会被当成制表符和换行;在 PostgreSQL(standard_conforming_strings 为 on,9.1 起默认)下则必须原样写,双写反而会多出一个反斜杠:

-- MySQL
INSERT INTO `my_table` (`path`) VALUES
  ('C:\\temp\\new');
-- PostgreSQL
INSERT INTO "my_table" ("path") VALUES
  ('C:\temp\new');

JSON 转 SQL 实测算例:3 条记录补 4 个 NULL

下面三条记录的字段并不一致:第三条没有 tags 和 score,却多了 vip。把它粘进输入框(或点「填入示例」),默认 MySQL 参数下统计条显示「3 行 / 5 列 / 1 条 INSERT / 补 NULL 4 个」。

[
  { "id": 1, "name": "张三", "tags": ["a", "b"], "score": 98.5 },
  { "id": 2, "name": "O'Brien", "tags": [], "score": null },
  { "id": 3, "name": "李四", "vip": true }
]

生成结果(MySQL,批量多行)

INSERT INTO `my_table` (`id`, `name`, `tags`, `score`, `vip`) VALUES
  (1, '张三', '["a","b"]', 98.5, NULL),
  (2, 'O''Brien', '[]', NULL, NULL),
  (3, '李四', NULL, NULL, TRUE);

补的 4 个 NULL 来自第一、二条缺 vip,第三条缺 tags 和 score;第二条的 score 本来就是 null,照写 NULL 但不计入「补 NULL」。名字里的单引号被双写成两个单引号,数组 tags 存成紧凑的 JSON 字符串。勾上「生成 CREATE TABLE」后,这几列会被推断为 INT、VARCHAR(32)、JSON、DECIMAL(3,1) 与 TINYINT(1)。

JSON 转 SQL 的规模上限与已知边界

所有计算都在你的浏览器里完成,没有服务器兜底,所以设了几道明确的护栏:单次最多约 100 万字符(选文件时另有 400 万字节预检)、嵌套最多 64 层、最多 10 万行记录、最多 1000 列。超出时直接给中文提示,不会截断后假装全部导入。代码框预览最多显示 2000 行,复制与下载始终是完整内容。

只接受标准 JSON:注释、尾随逗号、单引号、NaN 都会报出第几行第几列;每行一个 JSON 的 NDJSON 会额外提示你用方括号包起来。Oracle 中空字符串等同于 NULL、单个字符串字面量不能超过 4000 字节,遇到时会单独提示;PostgreSQL 按 standard_conforming_strings 开启生成,MySQL 默认按未开启 NO_BACKSLASH_ESCAPES 生成(可切换)。