JSON 转 SQL INSERT 工具
字面量草稿不包含绑定参数。应用写库请使用数据库驱动或 ORM 的参数绑定。
SQL 草稿
-- 输入 JSON 后生成草稿
四组 API 报文案例
载入案例会同时替换输入、表名、方言和展开选项。下方预期 SQL 在 JavaScript 运行前即可阅读。
嵌套 API 行、缺失字段与 NULL
MySQL 开启展开:user.name 变为 user_name,布尔值变为 1 与 0;第二行缺失的列补为 NULL。
mysql · 表名: api_users · 展开嵌套对象(user_name): true
原始 JSON
[
{ "id": 1, "user": { "name": "Ada" }, "active": true, "note": null },
{ "id": 2, "active": false }
]
预期 SQL 草稿
INSERT INTO `api_users` (`id`, `user_name`, `active`, `note`)
VALUES
(1, 'Ada', 1, NULL),
(2, NULL, 0, NULL);
缺失值与显式 null 都是 NULL,工具不会推导默认值或 NOT NULL 约束。
PostgreSQL 名称引号与反斜杠
表名和列名内部的双引号加倍。含反斜杠的路径使用 E 字面量,单引号加倍,布尔值输出 TRUE。
postgres · 表名: audit"log · 展开嵌套对象(user_name): true
原始 JSON
{
"odd\"key": "C:\\new\\O'Brien",
"active": true
}
预期 SQL 草稿
INSERT INTO "audit""log" ("odd""key", "active")
VALUES
(E'C:\\new\\O''Brien', TRUE);
表名作为单个标识符。这里只选择输出风格,不查询 PostgreSQL 服务端会话。
SQLite 将嵌套 JSON 保留为文本
关闭展开:对象和数组序列化为紧凑 JSON 字符串;JSON 文本中的单引号在 SQL 字面量中加倍,false 输出 0。
sqlite · 表名: records · 展开嵌套对象(user_name): false
原始 JSON
{
"id": 3,
"user": {
"name": "O'Brien"
},
"tags": [
"red",
"blue"
],
"active": false
}
预期 SQL 草稿
INSERT INTO "records" ("id", "user", "tags", "active")
VALUES
(3, '{"name":"O''Brien"}', '["red","blue"]', 0);
工具不创建 JSON 类型列或子表,请检查接收列类型。
展开路径冲突会停止转换
user_name 与 user.name 会生成同一列。转换器会报错并清空 SQL,不会选择其中一个值覆盖另一个。
mysql · 表名: records · 展开嵌套对象(user_name): true
原始 JSON
{ "user_name": "flat", "user": { "name": "nested" } }
预期错误
嵌套路径映射到了同一列。请重命名键或关闭嵌套展开。
关闭展开或修改键名可解决冲突;相同校验也适用于跨行数据。
把 API 报文映射为 INSERT 草稿
粘贴 JSON、填写单个表名、选择方言,再核对嵌套展开选项。列顺序按各行首次出现的键确定;缺失字段和显式 null 都输出 SQL NULL。复核后可复制或下载草稿。
MySQL 标识符使用反引号,PostgreSQL 与 SQLite 使用双引号;名称中的对应引号会加倍。public.users 会作为一个完整名称加引号,不会拆分为 schema 与表名。工具不生成 CREATE TABLE、不连接数据库,也不生成参数绑定。
使用边界与限制条件
- 展开时嵌套对象键用下划线连接;数组始终保存为 JSON 文本,关闭展开后对象也保存为 JSON 文本。不同路径映射到同列会报错,包括跨行冲突。空嵌套对象不贡献列。
- 字符串单引号加倍;MySQL 还对反斜杠加倍,按常见的反斜杠转义模式生成,NO_BACKSLASH_ESCAPES 模式需另行复核。PostgreSQL 含反斜杠时使用 E 前缀字面量;SQLite 保留反斜杠本义。
- 输出是 SQL 文本,不是绑定参数或数据库结构校验。需核对列类型、约束、权限及会话设置;应用写库应使用驱动或 ORM 参数接口。JSON 文本不会自动变成数据库 JSON 类型列。
- JSON.parse 使用 JavaScript 数值,大整数可能在转换前丢失精度。非有限数、实际 NUL 字符及无可用列的数据会报错。必须逐位保留的编号请使用字符串。
- 标量根映射为 value;数组中的标量还带原始 index。根数组生成多行,不生成关联表。空输入清除结果;空数组仅输出注释。转换与下载需要 JavaScript。
常见问题与技术解答 (FAQ)
JSON 转 SQL 会推导关系结构并建表吗?▼
不会。工具仅为一个加引号的表名生成 INSERT,不推导 CREATE TABLE、列类型、主键、索引或表间关系。
嵌套展开产生重名字段时会怎样?▼
user_name 与 user.name 都会映射为 user_name。即使出现在不同行也会停止并报错。请重命名键或关闭展开,然后重新检查映射。
三种方言怎样处理引号和反斜杠?▼
字符串单引号加倍。MySQL 还按常见转义模式对反斜杠加倍;PostgreSQL 含反斜杠时使用 E 字面量;SQLite 保留反斜杠。执行草稿前必须核对 MySQL 会话模式。
生成的 INSERT 能作为应用参数化写库语句吗?▼
输出是字面量 SQL,没有占位符和独立绑定值。应用写库应使用数据库驱动或 ORM 的参数接口,并自行检查数据库类型和约束。