JSON转SQL - 生成CREATE TABLE和INSERT语句 在线工具
将JSON数据转换为MySQL、PostgreSQL、SQLite和SQL Server的CREATE TABLE和INSERT语句 — 100%浏览器处理,数据不会发送到服务器。
常见问题
什么是 JSON to SQL 转换器?
JSON to SQL 转换器是一种将 JSON 数据转换为 SQL 语句的工具。它根据 JSON 中的结构和类型生成定义数据库模式的 CREATE TABLE 语句(DDL)和填充表数据的 INSERT INTO 语句(DML)。该工具会自动从 JSON 值推断 SQL 列类型:字符串变为 VARCHAR 或 TEXT,数字变为 INT 或 FLOAT,布尔值根据数据库方言变为 BOOLEAN 或 BIT,嵌套对象存储为 JSON 列。
如何将 JSON 转换为 SQL 语句?
将您的 JSON 数据(单个对象或对象数组)粘贴到输入字段中。选择目标 SQL 方言(MySQL、PostgreSQL、SQLite 或 SQL Server),输入表名,然后选择输出模式(CREATE TABLE + INSERT、仅 CREATE 或仅 INSERT)。该工具会在输出面板中即时生成对应的 SQL。在将结果复制到剪贴板之前,您可以自定义批量 INSERT 模式、主键选择和嵌套 JSON 处理等选项。
类型推断是如何工作的?
该工具分析所有行中每个 JSON 字段的所有值,以确定最佳的 SQL 列类型。字符串根据长度映射为 VARCHAR(255) 或 TEXT,整数根据大小映射为 INT 或 BIGINT,小数映射为 FLOAT,布尔值映射为方言特定的布尔类型(PostgreSQL 为 BOOLEAN,MySQL 为 TINYINT(1),SQL Server 为 BIT),null 值使列可为空。像 '2026-03-20' 这样的 ISO 8601 日期字符串会被检测并映射为 DATE 或 TIMESTAMP 类型。嵌套对象和数组存储为 JSON/JSONB 列。
SQL 方言之间有什么区别?
每种 SQL 方言对标识符、数据类型和功能都有独特的语法。MySQL 使用反引号引用(例如 `column_name`),PostgreSQL 使用双引号,SQLite 使用双引号,SQL Server 使用方括号([column_name])。布尔类型不同:PostgreSQL 有原生 BOOLEAN,MySQL 使用 TINYINT(1),SQL Server 使用 BIT。自增语法也不同:MySQL 使用 AUTO_INCREMENT,PostgreSQL 使用 SERIAL,SQLite 使用 AUTOINCREMENT,SQL Server 使用 IDENTITY(1,1)。JSON 存储也不同:PostgreSQL 有 JSONB,MySQL 有 JSON,而 SQLite 和 SQL Server 使用 TEXT/NVARCHAR(MAX)。
使用此工具时我的数据安全吗?
是的,完全安全。此工具使用客户端 JavaScript 在您的浏览器中处理所有内容。您的 JSON 数据永远不会离开您的计算机——没有服务器上传、没有 API 调用、没有数据存储。这使得它可以安全地用于生产数据库数据、包含敏感信息的 API 响应以及您需要转换为 SQL 的任何机密数据。
该工具如何处理嵌套的 JSON 对象和数组?
该工具为嵌套 JSON 提供两种策略。默认的'JSON 列'策略将嵌套对象和数组作为 JSON/JSONB 列存储在数据库中,保留原始结构。'扁平化'策略通过创建具有外键关系的独立关联表来规范化数据——嵌套对象变为带前缀名称的扁平化列,对象数组创建子表。选择 JSON 列用于快速存储和灵活查询,或选择扁平化用于完全规范化的关系模式设计。
什么是批量 INSERT 模式?
批量 INSERT 模式使用多值语法将多行合并为一个 INSERT 语句:INSERT INTO table VALUES (...), (...), (...)。在导入大型数据集时,这比单独的 INSERT 语句快得多,因为它减少了与数据库的往返次数。您可以配置批量大小(默认:每条语句 100 行)以在语句大小和性能之间取得平衡。所有主流数据库都支持此语法。
代码示例
// JSON to SQL converter
function jsonToSql(jsonStr, options = {}) {
const {
tableName = 'my_table',
dialect = 'mysql',
includeCreate = true,
includeInsert = true,
} = options;
const data = JSON.parse(jsonStr);
const rows = Array.isArray(data) ? data : [data];
if (rows.length === 0) return '';
// Collect all column names
const columns = [...new Set(rows.flatMap(Object.keys))];
// Infer types from all rows
const types = {};
for (const col of columns) {
for (const row of rows) {
const val = row[col];
if (val === null || val === undefined) continue;
if (typeof val === 'boolean') types[col] = 'BOOLEAN';
else if (typeof val === 'number') {
types[col] = Number.isInteger(val) ? 'INT' : 'FLOAT';
} else if (typeof val === 'object') types[col] = 'JSON';
else types[col] = 'VARCHAR(255)';
}
if (!types[col]) types[col] = 'VARCHAR(255)';
}
const quote = dialect === 'mysql' ? (n) => `\`${n}\``
: dialect === 'sqlserver' ? (n) => `[${n}]`
: (n) => `"${n}"`;
const parts = [];
if (includeCreate) {
const colDefs = columns.map(c => ` ${quote(c)} ${types[c]}`);
parts.push(`CREATE TABLE ${quote(tableName)} (\n${colDefs.join(',\n')}\n);`);
}
if (includeInsert) {
for (const row of rows) {
const vals = columns.map(c => {
const v = row[c];
if (v === null || v === undefined) return 'NULL';
if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';
if (typeof v === 'number') return String(v);
if (typeof v === 'object') return `'${JSON.stringify(v).replace(/'/g, "''")}'`;
return `'${String(v).replace(/'/g, "''")}'`;
});
parts.push(
`INSERT INTO ${quote(tableName)} (${columns.map(quote).join(', ')}) VALUES (${vals.join(', ')});`
);
}
}
return parts.join('\n\n');
}
// Example usage
const json = '[{"id":1,"name":"Alice","active":true},{"id":2,"name":"Bob","active":false}]';
console.log(jsonToSql(json, { tableName: 'users', dialect: 'postgresql' }));