JSON 转 SQL
免费在线 JSON 转 SQL 工具,将 JSON 数组自动转换为 INSERT 语句,并可同时生成 CREATE TABLE 建表脚本。支持 MySQL、PostgreSQL、SQLite、SQL Server 等 20 多种数据库方言,自动推断字段类型,浏览器本地处理不上传。
相关推荐
关于 JSON 转 SQL:把 JSON 数据快速导入关系型数据库
JSON 转 SQL 是指将 JSON 格式的数据(JSON 数组或 JSON 对象)转换为关系型数据库可执行的 SQL 脚本(INSERT 语句和 CREATE TABLE 语句)的过程。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其结构灵活、跨语言、易于人类阅读,广泛用于 API 接口、前后端数据传输、配置文件、日志记录等场景。而关系型数据库(MySQL、PostgreSQL、SQLite、SQL Server、Oracle 等)作为企业级数据存储的主流方案,存储和查询数据需要严格的表结构和 SQL 语句。把 JSON 数据导入关系型数据库时,就需要将 JSON 转换为对应的 SQL 脚本。
本工具的核心功能是把 JSON 数组里的每个对象转换为一行数据库记录。如果 JSON 是单一对象,工具会将其作为单行数据处理;如果 JSON 是数组,数组的每个元素对应一行记录。对象的 key 被用作数据库表的列名,value 被转换为对应的 SQL 字面量。整个转换过程在浏览器本地完成,无需后端服务。
类型推断是 JSON 转 SQL 的关键技术点。JSON 本身只有 6 种基本类型(null、boolean、number、string、array、object),而 SQL 有数十种数据类型(INT、BIGINT、FLOAT、DOUBLE、VARCHAR、TEXT、DATE、TIMESTAMP、BOOLEAN、BIT 等)。本工具的 detectType 函数会按 value 的字面量形式进行智能推断:null 映射为 SQL 的 NULL;true/false 映射为 BOOLEAN;整数根据范围映射为 INT(-2147483648 到 2147483647)或 BIGINT;浮点数映射为 FLOAT/DOUBLE/REAL(按方言差异);符合 ISO 8601 标准的日期/时间字符串分别映射为 DATE 或 TIMESTAMP;普通字符串长度不超过 255 的映射为 VARCHAR(255),超过的映射为 TEXT。
多行数据中的类型冲突需要特别处理。例如某列在第一行是 INT,第二行是 FLOAT,不能直接定义为 INT(会丢失小数)。本工具实现了类型升级机制:当列的当前类型与新值类型冲突时,会自动升级到能覆盖两种值的类型(INT 升级为 FLOAT)。同时 NULL 不参与类型决策(遇到 NULL 时保持原类型),保证推断结果稳定。所有行处理完成后,列类型才最终确定,因此转换结果的类型是基于全部数据的全局最优解。
不同数据库方言的 SQL 语法差异是另一个技术挑战。MySQL 用反引号(`name`)包裹标识符,PostgreSQL 和标准 SQL 用双引号("name"),SQL Server 用方括号([name]);SQLite 没有原生 BOOLEAN 类型,用 1/0 表示;BigQuery 的整数类型是 INT64,字符串是 STRING;Snowflake 的整数是 NUMBER,日期时间是 TIMESTAMP_NTZ;Oracle 的 VARCHAR 是 VARCHAR2,布尔用 NUMBER(1);DB2 的文本是 CLOB。本工具通过 DIALECT_CONFIG 集中管理这些差异,根据用户选择的方言自动适配标识符引号、数据类型、布尔值表示等细节。
CREATE TABLE 语句的自动生成依赖于类型推断结果。当用户在设置中开启「生成 CREATE TABLE」选项时,工具会在 INSERT 语句前输出 CREATE TABLE 语句:表名来自用户配置(默认 users),列名来自 JSON 对象的 key,列类型来自类型推断结果。对于支持 IF NOT EXISTS 的方言,会自动加上该子句,避免重复创建表报错;对于不支持的方言(如 Oracle PL/SQL、SQL Server T-SQL),会省略 IF NOT EXISTS 保持兼容性。生成的 CREATE TABLE 语句与 INSERT 语句组合成完整的初始化脚本,可在空数据库中一键执行。
批量插入是性能优化的关键。如果 1 万行 JSON 数据被转换为 1 万条独立的 INSERT 语句,导入速度会非常慢(每条语句都要解析、规划、执行、提交事务)。本工具支持配置批量大小(默认 100,可调 1-1000),将多条记录合并为一条 INSERT 的多值元组(VALUES (1,2), (3,4), ...),显著减少 SQL 语句数量,导入性能可提升 10-100 倍。批量大小需要根据具体数据库和服务器配置调整,过大的批量可能导致单条 INSERT 超过 max_allowed_packet 限制。
JSON 格式的容错是实用功能。现实中用户提供的 JSON 经常存在小问题:尾随逗号([{"a":1},])、单引号代替双引号({'a':1})、缺引号的 key({a:1})、注释(/* */)等。严格按 JSON 规范解析这些内容会直接失败。本工具内置 tryFixJSON 修复函数,会在解析失败时尝试自动修复常见错误,修复成功后会提示用户并继续转换。这一设计大幅提升了工具的实用性,避免因小错误反复手动调整。
纯前端处理是本工具的核心优势。所有 JSON 解析、类型推断、SQL 生成都在浏览器 JavaScript 中执行,使用 sql-formatter 库做最终的美化处理,不向任何服务器发送任何数据。这种设计有两点好处:第一,JSON 数据可能包含用户隐私(用户信息、订单数据)、商业敏感(内部业务数据),本地处理避免泄露风险;第二,转换速度仅受设备 CPU 限制,无网络延迟,处理中等规模数据(10MB 以内)几乎瞬时完成。这与命令行工具(如 jq + sed)相比更易用,与在线服务(如某些需要注册的转换网站)相比更安全。
适用场景
- 把 API 返回的 JSON 数据转换为 INSERT 语句,导入 MySQL/PostgreSQL 等关系数据库做业务分析。
- 从 JSON 配置文件或数据字典生成 CREATE TABLE 建表脚本,初始化新项目的数据库表结构。
- 把前端 mock 数据或测试数据 JSON 转换为 SQL 脚本,用于填充测试环境的数据库。
- 数据迁移场景:把 MongoDB/Elasticsearch 导出的 JSON 数据转换为 SQL 脚本导入到关系型数据库。
- ETL 流程:将上游 JSON 数据源预处理为标准 INSERT 语句,作为下游数据库导入的输入。
- 数据库备份恢复:将关键业务数据保存为 JSON 格式,需要时一键转换为 SQL 脚本快速恢复。
- 开发协作:前后端约定 JSON 数据格式,后端可一键转换为建表 SQL 与种子数据 SQL。
- 教学演示:演示 JSON 数据到 SQL 语句的转换过程,帮助学习者理解类型映射和批量插入原理。
- Swagger/OpenAPI 文档生成的 Mock JSON 转换为目标数据库 SQL,快速搭建联调环境。
- CI/CD 数据初始化:把 YAML 流水线中的 JSON fixture 一键转为 SQL 脚本注入测试数据库做集成测试。
- 数据脱敏:把生产数据库导出的 JSON 转换为 SQL 时去掉用户敏感字段,仅做结构和类型验证用。
- 离线分析准备:分析师把第三方 JSON 数据源转换为 SQL 导入 ClickHouse/Snowflake 等 OLAP 引擎做即时查询。
- 跨方言迁移:把 MySQL dump 出来的 JSON 转换为 PostgreSQL/SQLite/Oracle 等方言的建表和插入脚本做平台迁移。
使用方法
- 在左侧输入框粘贴 JSON 数组或 JSON 对象内容,或点击「上传」按钮选择 .json/.txt 文件,或点击「示例」加载内置样例
- 在工具栏右侧的下拉菜单中选择目标数据库方言(MySQL、PostgreSQL、SQLite、SQL Server 等 20 多种)
- 点击「设置」按钮配置表名、是否生成 CREATE TABLE、批量插入行数(1-1000)等选项
- 点击「转换」按钮(或按快捷键),工具会自动解析 JSON、推断类型、生成 SQL 并显示在右侧面板
- 查看转换结果:右侧显示生成的 SQL 脚本、底部状态栏显示总行数和列数
- 点击「复制」将 SQL 复制到剪贴板,或点击「下载」将 SQL 保存为 .sql 文件(如 users.sql)
- 将 SQL 脚本粘贴到数据库客户端(Navicat、DBeaver、pgAdmin、MySQL Workbench 等)执行即可完成数据导入
功能特点
- INSERT 语句批量生成:自动将 JSON 数组转换为标准 INSERT INTO 语句,支持批量插入配置(1-1000 行/条)
- CREATE TABLE 建表脚本:可选生成 DDL 语句,自动推断字段类型(VARCHAR/INT/BIGINT/FLOAT/BOOLEAN/TIMESTAMP/DATE)
- 20 多种数据库方言:覆盖 MySQL/PostgreSQL/SQLite/SQL Server/Oracle/DB2/BigQuery/Snowflake 等主流数据库
- 智能类型推断:自动识别 null/布尔/整数/浮点/日期/时间/短长字符串,分别映射为最合适的 SQL 类型
- SQL 自动美化:内置 sql-formatter,关键字大写、缩进对齐、VALUES 多值元组结构清晰可读
- JSON 错误自修复:自动修复尾随逗号、单引号、缺引号等常见 JSON 语法错误,提升转换成功率
- 字段类型升级机制:多行数据中冲突类型自动升级(如 INT + FLOAT 升级为 FLOAT),保证类型覆盖所有数据
- 表名与列名自定义:表名作为文件名下载(如 users.sql),列名直接采用 JSON 对象的 key
- 多种交互方式:支持粘贴、文件上传、示例数据加载三种输入方式,满足不同使用习惯
- 统计信息实时显示:转换后显示总行数和列数,便于核对数据完整性
- 复制与下载:转换结果可一键复制到剪贴板,或下载为标准 .sql 文件直接导入数据库
- 纯浏览器本地处理:所有解析和转换在浏览器 JavaScript 中完成,JSON 数据不离开设备,保护隐私
常见问题
怎么把 JSON 数组转换成 SQL INSERT 语句?
把 JSON 数组粘贴到左侧输入框,工具会自动把数组里的每个对象转换为一组 INSERT INTO 语句。对象的 key 作为列名,value 自动添加引号或保留数字格式,生成的 SQL 可直接复制到 MySQL、PostgreSQL、SQLite 等数据库客户端执行。
能从 JSON 自动生成 CREATE TABLE 建表脚本吗?
可以。在设置中开启「生成 CREATE TABLE」选项,工具会分析 JSON 中的字段类型,自动推断对应的 SQL 数据类型(VARCHAR、INT、BIGINT、FLOAT、BOOLEAN、TIMESTAMP、DATE 等),生成完整的 CREATE TABLE 语句,与 INSERT 语句一起组成可直接执行的 SQL 脚本。
支持哪些数据库方言?
支持 20 多种主流数据库方言,包括 MySQL、MariaDB、PostgreSQL、SQLite、SQL Server (T-SQL)、Oracle PL/SQL、DB2、BigQuery、Snowflake、Redshift、DuckDB、ClickHouse、Trino、Spark SQL、Hive、TiDB、SingleStoreDB、N1QL 等。不同方言的标识符引号(反引号、双引号、方括号)、数据类型(INT64、NVARCHAR、CLOB 等)和布尔值表示(TRUE/FALSE、1/0)会自动适配。
工具如何推断 JSON 字段的 SQL 类型?
null 映射为 NULL;true/false 映射为 BOOLEAN(SQLite/DB2/SQL Server 转为 1/0 或 BIT);整数根据范围映射为 INT 或 BIGINT(超过 2147483647 自动升为 BIGINT);浮点数映射为 FLOAT/DOUBLE/REAL(按方言);ISO 8601 日期/时间字符串自动识别为 DATE 或 TIMESTAMP;短字符串映射为 VARCHAR(255),超过 255 字符的映射为 TEXT。多行数据中冲突类型会自动升级(如 INT + FLOAT 升级为 FLOAT)。
生成的 SQL 文件能直接导入数据库吗?
可以。生成的 SQL 符合目标方言的标准语法,可直接在 MySQL Workbench、Navicat、DBeaver、pgAdmin、SQL Server Management Studio、phpMyAdmin 等数据库管理工具中执行。下载后的文件扩展名为 .sql,表名作为文件名(如 users.sql),便于在数据库客户端批量导入。
JSON 解析失败怎么办?
如果 JSON 存在尾随逗号、缺引号、单引号代替双引号等常见语法错误,工具会自动调用 tryFixJSON 修复函数尝试修复并继续转换。如果修复后仍无法解析,会在右侧显示具体错误位置和原因,便于定位问题。复杂嵌套的非法 JSON 建议先用「JSON 格式化」工具检查。
支持批量插入吗?一条 INSERT 可以插入多少行?
支持。默认每条 INSERT 插入 100 行(可设置 1-1000)。将大量 JSON 数据转换为 SQL 时,批量插入可大幅减少 SQL 语句数量,显著提升数据库导入速度。例如 1 万行 JSON 数据会被打包为 100 条 INSERT,每条包含 100 个 VALUES 元组,相比逐行插入性能可提升 10-100 倍。
上传的 JSON 数据会保存到服务器吗?
不会。本工具是纯前端应用,所有 JSON 解析、类型推断、SQL 生成都在浏览器本地 JavaScript 中完成,不向任何服务器发送内容。文件上传通过浏览器原生 FileReader API 读取,转换完成后刷新页面即清除。即使处理含用户隐私、商业敏感的 JSON 数据也不会泄露。
JSON 中的日期字符串会被正确识别吗?
会的。工具会自动识别两种 ISO 8601 格式:含 T 分隔符的(如 2024-05-20T10:30:00)映射为 TIMESTAMP 类型;仅含日期的(如 2024-05-20)映射为 DATE 类型。识别准确率取决于字符串是否符合 ISO 8601 标准,非标准格式(如 2024/05/20、May 20, 2024)会被当作普通 VARCHAR 字符串处理。
工具支持多大的 JSON 文件?
理论上无硬性上限,受浏览器内存限制。一般 10MB 以内的 JSON 文件可流畅处理(可包含数万到数十万行数据),更大的文件可能因浏览器内存不足变慢。处理超大型文件时可分批转换,每批设置合理的表名避免冲突。所有转换在浏览器本地完成,不受网络传输限制。
生成的 SQL 会自动格式化美化吗?
会的。工具内置 sql-formatter 库,会对生成的 SQL 进行自动美化:关键字大写(SELECT、INSERT INTO、VALUES、CREATE TABLE)、每行一条记录、缩进对齐、保留必要的空行。美化后的 SQL 在数据库客户端中阅读体验更好,也方便后续人工修改。
能在 INSERT 中指定列的顺序吗?
默认按 JSON 中第一个对象出现的 key 顺序作为列顺序,确保多行数据列对齐。如果 JSON 数组中不同对象的 key 顺序不一致,工具会自动合并所有 key 并去重,缺失字段的值用 NULL 填充。建议在转换前用「JSON 格式化」工具规范化 JSON,确保列顺序一致。
故障排查
转换后右侧 SQL 面板只显示「No valid objects found in JSON」?
原因 1:JSON 顶层不是数组也不是对象(如直接是字符串、数字),工具无法转换为行数据。解决:将 JSON 包装为数组 [{...}] 或对象 {...}。原因 2:JSON 数组中的元素是原始值([1, 2, 3])而非对象,没有列名可对应。解决:每个数组元素必须是包含 key-value 对的对象。原因 3:JSON 解析失败被 tryFixJSON 修复后,修复结果仍非对象。解决:检查 JSON 语法,用「JSON 格式化」工具排查。
转换后的 SQL 在数据库中执行时报语法错误?
原因 1:选择了错误的方言(如选了 MySQL 但实际是 PostgreSQL 数据库),引号风格不兼容。解决:在下拉菜单中选择正确的目标数据库方言。原因 2:表名或列名包含 SQL 保留字(如 order、user、select)。解决:在设置中修改表名为非保留字,或手动编辑 SQL 用反引号/方括号包裹保留字。原因 3:批量行数过大超过数据库 max_allowed_packet 限制。解决:在设置中将批量行数调小(如改为 50)。
日期字段被识别为字符串而不是 DATE/TIMESTAMP?
原因:日期字符串不符合 ISO 8601 标准格式。本工具仅识别 YYYY-MM-DD(DATE)和 YYYY-MM-DDTHH:mm:ss(TIMESTAMP)两种格式。常见不识别格式:YYYY/MM/DD、DD-MM-YYYY、May 20 2024、Unix 时间戳(1234567890)。解决:先在 JSON 中将日期转换为 ISO 8601 标准格式,或在转换后手动修改 CREATE TABLE 的列类型为合适的 DATE/VARCHAR 类型。
布尔值在 SQLite/DB2 中变成 1/0 而我希望是 TRUE/FALSE?
原因:SQLite、DB2、SQL Server 等方言原生不支持 BOOLEAN 类型,按标准做法用 1/0 或 BIT 整数表示。解决:方案一,接受 1/0 表示(1=TRUE, 0=FALSE,标准做法);方案二,在应用层读取时转换(编程语言中 1→true, 0→false);方案三,手动编辑 SQL 将 1/0 替换为 TRUE/FALSE 并改列类型为 INTEGER 配合应用层处理。本工具按方言标准做法输出,不提供非标准选项。
多行 JSON 中相同字段类型不一致(如一行的 id 是字符串,另一行是数字)?
本工具有类型升级机制保证列类型能容纳所有值。例如某列第一行是 INT,第二行是 FLOAT,最终列类型升级为 FLOAT。如果某列同时存在字符串和数字,会按字符串优先升级为 VARCHAR。极端冲突(如某行是对象而非原始值)会被序列化为 JSON 字符串存为 TEXT。建议转换前用「JSON 校验」或「JSON 格式化」工具检查数据一致性。
下载的 .sql 文件在数据库客户端中导入后中文乱码?
原因:.sql 文件本身是 UTF-8 编码,但数据库客户端或数据库的字符集配置不是 UTF-8。解决:方案一,将数据库的字符集设置为 utf8mb4(MySQL)或 UTF8(PostgreSQL)。方案二,在客户端连接时指定字符集(如 MySQL 命令行用 --default-character-set=utf8mb4)。方案三,用文本编辑器打开 .sql 文件确认是 UTF-8 编码(不是 GBK 或其他)。本工具生成的 .sql 文件始终是 UTF-8 编码。
JSON 中包含嵌套对象或数组,转换后列类型是什么?
本工具对非原始类型(嵌套对象、数组)会序列化为 JSON 字符串存为 TEXT 类型的列。例如 {"tags": ["a", "b"], "profile": {"age": 30}} 会生成 tags TEXT, profile TEXT 两列,存储 JSON 序列化后的字符串。查询时可用 JSON_EXTRACT(MySQL 5.7+)等 JSON 函数提取嵌套字段。如果需要将嵌套数据展开为多张关联表,建议在应用层处理或使用专用 ETL 工具。
术语表
- JSON(JavaScript Object Notation)
- 轻量级数据交换格式,基于 JavaScript 对象语法,但独立于编程语言。支持对象({})、数组([])、字符串、数字、布尔、null 六种基本类型。广泛用于 API 接口、前后端数据传输、配置文件、日志等场景。
- SQL(Structured Query Language)
- 结构化查询语言,关系型数据库(MySQL、PostgreSQL、SQLite、SQL Server、Oracle 等)的标准操作语言。包含 DDL(数据定义,如 CREATE TABLE)、DML(数据操作,如 INSERT)、DQL(数据查询,如 SELECT)、DCL(数据控制)等子集。
- INSERT 语句
- SQL 中用于向表插入数据的 DML 语句,语法为 INSERT INTO table_name (col1, col2) VALUES (val1, val2)。支持单值元组和多值元组(一条 INSERT 多行),后者可大幅提升批量导入性能。
- CREATE TABLE 语句
- SQL 中用于创建表的 DDL 语句,定义表名、列名、数据类型、约束(NOT NULL、PRIMARY KEY、UNIQUE、DEFAULT 等)。本工具生成的 CREATE TABLE 不包含主键、外键、索引等复杂约束,保持简洁。
- SQL 方言(SQL Dialect)
- 不同数据库厂商对 SQL 标准的扩展实现差异。MySQL 用反引号,PostgreSQL 用双引号,SQL Server 用方括号;SQLite 没有原生 BOOLEAN 用 1/0;Oracle 用 VARCHAR2;BigQuery 用 INT64 和 STRING。同一逻辑 SQL 在不同方言下语法可能不同。
- DDL(Data Definition Language)
- 数据定义语言,SQL 子集,包含 CREATE、ALTER、DROP 等语句,用于定义和修改数据库结构(表、视图、索引、约束等)。本工具生成的 CREATE TABLE 属于 DDL。
- DML(Data Manipulation Language)
- 数据操作语言,SQL 子集,包含 INSERT、UPDATE、DELETE 语句,用于操作表中的数据行。本工具生成的 INSERT INTO 属于 DML。
- 类型推断(Type Inference)
- 在编程语言和工具中根据值的字面量形式自动判断其类型的过程。本工具根据 JSON value 的 typeof(null/boolean/number/string)和具体形式(ISO 8601 日期、长度等)映射为对应的 SQL 类型。
- 标识符引号(Identifier Quote)
- SQL 中包裹表名、列名等标识符的特殊字符。MySQL 用反引号 `name`,PostgreSQL 和标准 SQL 用双引号 "name",SQL Server 用方括号 [name]。用于保留字转义或大小写敏感场景。
- ISO 8601 日期格式
- 国际标准化组织定义的日期时间表示标准,格式为 YYYY-MM-DD(日期)或 YYYY-MM-DDTHH:mm:ss(日期时间)。本工具自动识别符合该格式的字符串,分别映射为 SQL 的 DATE 和 TIMESTAMP 类型。
- VARCHAR 与 TEXT
- SQL 中表示字符串的两种类型。VARCHAR(n) 有长度限制(n 通常最大 65535),适合短字符串(姓名、邮箱、标题等);TEXT 无长度限制(或限制很大),适合长文本(描述、内容、备注等)。本工具默认 255 字符以下用 VARCHAR,超过用 TEXT。
- INT 与 BIGINT
- SQL 中表示整数的两种类型。INT(INTEGER)通常是 32 位有符号整数,范围 -2147483648 到 2147483647;BIGINT 是 64 位有符号整数,范围更大。本工具对绝对值超过 INT 范围的整数自动升级为 BIGINT。
- BOOLEAN 类型
- SQL 中表示真值的类型。MySQL、PostgreSQL、BigQuery 等原生支持 BOOLEAN(存储 TRUE/FALSE);SQLite 没有原生 BOOLEAN,用 1/0 或 INTEGER;SQL Server 用 BIT 类型;DB2 用 SMALLINT。本工具按方言自动适配。
- IF NOT EXISTS 子句
- CREATE TABLE 的可选项,用于在表已存在时跳过创建避免报错。MySQL、PostgreSQL、SQLite、BigQuery 等支持;Oracle PL/SQL 和 SQL Server T-SQL 不支持(需要先判断再创建)。本工具按方言自动决定是否输出该子句。
- 批量插入(Batch Insert)
- 将多条数据合并为单条 INSERT 语句的技术,语法为 VALUES (1,2), (3,4), (5,6)。相比逐条插入,可减少 SQL 解析次数和网络往返,导入性能通常提升 10-100 倍。本工具默认每条 INSERT 包含 100 行,可配置 1-1000。
- sql-formatter
- JavaScript SQL 格式化库,支持 20 多种数据库方言,能对 SQL 语句进行关键字大写、缩进美化、关键字换行等处理。本工具在生成 SQL 后调用此库做最终美化,提升可读性。
支持的数据库方言与关键差异
本工具支持的 20 多种数据库方言及其标识符引号、数据类型、布尔值表示等关键差异:
| 方言 | 标识符引号 | 整数类型 | 布尔表示 | 支持 IF NOT EXISTS |
|---|---|---|---|---|
| MySQL | 反引号 ` | INT | TRUE | 是 |
| MariaDB | 反引号 ` | INT | TRUE | 是 |
| TiDB | 反引号 ` | INT | TRUE | 是 |
| SingleStoreDB | 反引号 ` | INT | TRUE | 是 |
| PostgreSQL | 双引号 " | INTEGER | TRUE | 是 |
| Redshift | 双引号 " | INTEGER | TRUE | 是 |
| DuckDB | 双引号 " | INTEGER | TRUE | 是 |
| Trino | 双引号 " | INTEGER | TRUE | 是 |
| SQLite | 双引号 " | INTEGER | 1/0 | 是 |
| BigQuery | 反引号 ` | INT64 | TRUE | 是 |
| Snowflake | 双引号 " | NUMBER | TRUE | 是 |
| DB2 | 双引号 " | INTEGER | 1/0 | 是 |
| DB2i | 双引号 " | INTEGER | 1/0 | 是 |
| Oracle PL/SQL | 双引号 " | NUMBER | 1/0 | 否 |
| SQL Server T-SQL | 方括号 [] | INT | 1/0 | 否 |
| Transact-SQL | 方括号 [] | INT | 1/0 | 否 |
| Spark SQL | 反引号 ` | INT | TRUE | 是 |
| Hive | 反引号 ` | INT | TRUE | 是 |
| ClickHouse | 反引号 ` | Int32 | 1/0 | 是 |
| N1QL (Couchbase) | 反引号 ` | NUMBER | TRUE | 是 |
JSON 类型到 SQL 类型的映射规则
本工具的 detectType 函数根据 JSON value 的形式推断 SQL 类型的完整规则:
| JSON 值 | 示例 | 推断 SQL 类型 | 判断规则 |
|---|---|---|---|
null | null | NULL | JSON null 映射为 SQL NULL |
boolean | true / false | BOOLEAN | 原生支持 BOOLEAN 的方言直接用 BOOLEAN,SQLite/DB2/SQL Server 转为 1/0 或 BIT |
integer (32位) | 1, 100, -9999 | INT / INTEGER | 绝对值 ≤ 2147483647 用 INT |
integer (64位) | 9999999999, -1234567890 | BIGINT | 绝对值 > 2147483647 升为 BIGINT |
float | 3.14, -0.5, 1e10 | FLOAT / DOUBLE / REAL | 浮点数按方言用 FLOAT/DOUBLE/REAL |
ISO 8601 date-time | 2024-05-20T10:30:00 | TIMESTAMP | 匹配 /^\d{4}-\d{2}-\d{2}T/ 用 TIMESTAMP |
ISO 8601 date | 2024-05-20 | DATE | 匹配 /^\d{4}-\d{2}-\d{2}/ 用 DATE |
short string | Alice, 北京 | VARCHAR(255) | 长度 ≤ 255 用 VARCHAR(255) |
long string | 超过 255 字符 | TEXT | 长度 > 255 用 TEXT(CLOB/NVARCHAR(MAX)/STRING 等方言差异) |
JSON 转 SQL 与其他格式转换工具的对比
本工具与 JSON 转 CSV/Excel/YAML 等其他格式转换工具的能力差异:
| 能力维度 | JSON 转 SQL | JSON 转 CSV | JSON 转 YAML | JSON 转 XML |
|---|---|---|---|---|
| 输出可执行 SQL | ✓ (含 DDL+DML) | ✗ | ✗ | ✗ |
| 数据库方言支持 | 20+ 种 | 通用 | 通用 | 通用 |
| 字段类型自动推断 | ✓ (含方言适配) | ✗ (纯文本) | 通用类型 | 通用类型 |
| 批量插入优化 | ✓ (可配置 1-1000) | ✗ | ✗ | ✗ |
| 表结构 (DDL) 生成 | ✓ | ✗ | ✗ | ✗ |
| 数据导入数据库 | ✓ (直接执行) | 需手动导入 | 需手动导入 | 需手动导入 |
Privacy & Security
本 JSON 转 SQL 工具所有操作完全在你的浏览器本地完成:JSON 解析、类型推断、SQL 生成、SQL 美化全部通过浏览器 JavaScript 在客户端执行,不会通过网络向任何服务器发送 JSON 内容、上传的文件或转换结果。文件上传使用浏览器原生 FileReader API 直接读取到内存,不经过任何中间服务。不使用 Cookie 追踪,不收集任何用户输入或使用数据。关闭或刷新页面后,所有输入和输出内容自动从内存清除。适合处理含用户隐私、商业敏感的业务数据 JSON。
Authoritative References
- MySQLMySQL INSERT 语法官方文档
- PostgreSQLPostgreSQL INSERT 语法官方文档
- SQLiteSQLite INSERT 语法官方文档
- MicrosoftSQL Server INSERT 语法官方文档
- MDNJSON 规范 - MDN Web Docs
- WikipediaISO 8601 日期时间标准 - Wikipedia
- GitHubsql-formatter GitHub 仓库
- JSON 压缩
- CSV 转 JSON
- JSON 转 CSV
- JSON Diff
- JSON Escape / Unescape
- JSON扁平化
- JSON 格式化
- JSON 生成器
- JSONPath 查询
- JSON 合并
- JSON 修复
- JSON Schema 校验
- JSON 排序
- JSON Stringify
- JSON 转 HTML
- JSON 转 Java
- JSON 转 Markdown
- JSON 转 SQL
- JSON 转 TOML
- JSON 转 TypeScript
- XML 转 JSON
- JSON 转 XML
- YAML 转 JSON
- JSON 转 YAML
- JSON 转 Python
- JSON 转 Go
- JSON 转 Rust
- JSON 转 Swift
- JSON 转 C#
- JSON 转 C++
- JSON 转 PHP