跳到主要内容
AZ Tools

JSON → SQL INSERT 生成器

粘贴 JSON 数组(或单个对象),输出可直接运行的 SQL insert。列为所有键的并集;缺列的行填 NULL。字符串用单引号转义,数字和布尔变字面量,嵌套对象/数组序列化为 JSON。可选 `ON CONFLICT`(Postgres/SQLite)或 `ON DUPLICATE KEY UPDATE`(MySQL)以便把输出直接丢进同步任务。

SQL(3)
INSERT INTO "users" ("id", "name", "email", "verified", "joined")
VALUES
  (1, 'Alice', 'alice@example.com', TRUE, '2024-01-15'),
  (2, 'Bob', 'bob@example.com', FALSE, '2024-03-22'),
  (3, 'Carol', NULL, TRUE, '2024-06-01');

字符串通过双写单引号转义 — 四种方言都安全。

使用方法

  1. 粘贴 JSON 对象数组(或单个对象)。
  2. 设置表名和 SQL 方言。
  3. 开启多行 VALUES 得到单条语句,关闭则每行一条 INSERT。需要 ON CONFLICT / ON DUPLICATE KEY UPDATE 时开启 upsert。

常见问题

嵌套对象如何处理?
序列化为 JSON 并作为带引号字符串插入。PostgreSQL 与 MySQL 的 `JSON`/`JSONB` 列直接接受;SQLite 则作为 TEXT。
多行 VS 每行一条 INSERT 的区别?
多行生成单条 `INSERT INTO ... VALUES (…), (…), (…);`,在批量装载时快得多。每行生成 N 条语句 — 想单独注释某行或预期部分失败时更方便。
这样的转义足以让生成的 SQL 可以放心执行吗?
它只是把单引号转义掉,使语句在语法上成立,这和「面对恶意输入是安全的」不是一回事。生成出来的 SQL 只是文本:执行之前先读一遍;如果数据来自你控制不了的地方,请改用参数化语句,或者 COPY、LOAD DATA 这类批量导入方式,而不是把生成的脚本粘进控制台。
为什么我的数字被加了引号,或者 ID 少了几位?
类型跟随的是 JSON,而不是你的表。JSON 里写成 "42" 的值,即使列是整数也会输出带引号的字面量:请在 SQL 里做类型转换,或者修正 JSON。大的标识符则是相反的陷阱:如果它们是以 JSON 数字的形式送来的,很可能在到达本工具之前就已经丢掉了末尾几位——这正是 ID 应当以字符串传递的原因。

相关工具