跳到正文

将 JSON 转换为 SQL

拖入你的 JSON 文件并选择数据库,即可得到包含 CREATE TABLE 和 INSERT 语句的 SQL 脚本。每列都会获得类型,每处修正都会连同所在行和列一起列出。

你的文件
jsonpedidos_2024.json示例文件,771 B
你的数据库

已转换 4 行,2 处修正,无拒绝

显示
pedidos_2024.json 的前几行,每处修正都已标出
行
2000481Peña Muñoz2024-02-03T10:15:00Z1234.5true
3000482José Ángel Ruiz2024-02-15T16:40:00Z99.9falseEntrega en la tarde
4000483Zoë Ortíz2024-02-29T09:05:00Z12true
5000484Ñuño Castañeda2024-03-11T13:30:00Z980.75síFactura con "RFC"
-- Written by IntoSQL for PostgreSQL.

SET client_encoding = 'UTF8';
BEGIN;

CREATE TABLE pedidos_2024 (
    pedido text NOT NULL,
    cliente text NOT NULL,
    fecha timestamptz NOT NULL,
    total numeric(6,2) NOT NULL,
    pagado boolean NOT NULL,
    notas text
);

INSERT INTO pedidos_2024 (pedido, cliente, fecha, total, pagado, notas) VALUES
('000481', 'Peña Muñoz', '2024-02-03 10:15:00+00:00', 1234.5, TRUE, NULL),
('000482', 'José Ángel Ruiz', '2024-02-15 16:40:00+00:00', 99.9, FALSE, 'Entrega en la tarde'),
('000483', 'Zoë Ortíz', '2024-02-29 09:05:00+00:00', 12, TRUE, NULL),
('000484', 'Ñuño Castañeda', '2024-03-11 13:30:00+00:00', 980.75, TRUE, 'Factura con "RFC"');

COMMIT;

修正

  1. 已保留 "pedido" 中的前导零:000481 仍为 000481,以文本存储。
  2. "pagado" 包含是/否类词语(sí),已存储为布尔值。

文件在这台电脑上转换,永远不会上传。

其他示例:

一个 JSON 文件,六种数据库

上方的示例 pedidos_2024.json,以及它的每一列在各个数据库中获得的类型。

文件中第一个值PostgreSQLMySQLMariaDBSQLiteSQL ServerOracle
pedido000481textvarchar(8)varchar(8)TEXTnvarchar(8)VARCHAR2(8 CHAR)
clientePeña Muñoztextvarchar(16)varchar(16)TEXTnvarchar(16)VARCHAR2(16 CHAR)
fecha2024-02-03T10:15:00ZtimestamptzdatetimedatetimeDATETIMEdatetimeoffsetTIMESTAMP WITH TIME ZONE
total1234.5numeric(6,2)decimal(6,2)decimal(6,2)NUMERIC(6,2)decimal(6,2)NUMBER(6,2)
pagadotruebooleantinyint(1)tinyint(1)BOOLEANbitNUMBER(1)
notas-textvarchar(32)varchar(32)TEXTnvarchar(32)VARCHAR2(32 CHAR)

将脚本导入你的数据库

下载的是普通的 .sql 文件。每种数据库都可用自带的工具运行它。

  • PostgreSQL

    psql -v ON_ERROR_STOP=1 -d mydb -f pedidos_2024.postgresql.sql

    ON_ERROR_STOP 让 psql 在遇到第一个错误时停止。脚本在一个事务中运行,因此导入失败时数据库保持原样。

  • MySQL

    mysql --default-character-set=utf8mb4 mydb < pedidos_2024.mysql.sql

    脚本自身已设置 utf8mb4;该参数让客户端以相同方式发送,因此重音字符完整保留。

  • MariaDB

    mariadb --default-character-set=utf8mb4 mydb < pedidos_2024.mariadb.sql

    脚本自身已设置 utf8mb4;该参数让客户端以相同方式发送,因此重音字符完整保留。

  • SQLite

    sqlite3 pedidos_2024.db < pedidos_2024.sqlite.sql

    如果数据库文件不存在,会自动创建。转换器也能直接下载现成的 .sqlite 数据库,无需任何命令。

  • SQL Server

    sqlcmd -S localhost -d mydb -f 65001 -i pedidos_2024.sql_server.sql

    -f 65001 以 UTF-8 读取文件,因此重音字符和 ñ 会按原样导入。

  • Oracle

    sqlplus user@//localhost/mydb @pedidos_2024.oracle.sql

    脚本会关闭替换变量(SET DEFINE OFF),因此数据中的 & 符号会保持不变。

命令行可免费将文件直接导入 SQLite 数据库。使用 IntoSQL Pro,命令行和桌面应用还能导入 PostgreSQL、MySQL 和 MariaDB。SQL Server 和 Oracle 请运行脚本。

关于 JSON 文件和各个数据库需要了解的内容

IntoSQL 如何读取 JSON 文件

  • 文件可以是对象数组、在 data 等键下保存该数组的对象,或者每行一个对象(NDJSON)。
  • 每个键成为一列。值中的对象和数组以 JSON 文本保留。
  • 数字保留全部位数,ISO 8601 日期会变成日期或时间戳。

关于各个数据库需要了解的内容

  • 打开文件后选择数据库:每个数据库都使用它支持的类型。

各类值在每个数据库中的存储方式

值PostgreSQLMySQLMariaDBSQLiteSQL ServerOracle
是与否booleantinyint(1)tinyint(1)BOOLEANbitNUMBER(1)
整数integerintintINTEGERintNUMBER(10)
大整数bigintbigintbigintINTEGERbigintNUMBER(19)
小数numeric(p,s)decimal(p,s)doubledecimal(p,s)doubleNUMERIC(p,s)TEXTdecimal(p,s)NUMBER(p,s)
浮点数double precisiondoubledoubleREALfloatBINARY_DOUBLE
日期datedatedateDATEdateDATE
时刻timetime(6)timetime(6)timeTIMEtimeINTERVAL DAY(0) TO SECOND
带时间的日期timestampdatetime(6)datetimedatetime(6)datetimeDATETIMEdatetime2TIMESTAMP
带时间和时区偏移的日期timestamptzdatetime(6)datetimedatetime(6)datetimeDATETIMEdatetimeoffsetTIMESTAMP WITH TIME ZONE
文本textvarchar(n)textmediumtextlongtextvarchar(n)textmediumtextlongtextTEXTnvarchar(n)nvarchar(max)VARCHAR2(n CHAR)CLOB

关于 JSON 转 SQL 的问题

这里没有你要的答案?请通过联系页面给我们留言,会有专人回复。 联系页面

如何将 JSON 转换为 SQL?

将文件拖到本页顶部的转换器上,并选择数据库:PostgreSQL、MySQL、MariaDB、SQLite、SQL Server 或 Oracle。每种数据库都使用它支持的类型。下载脚本后在数据库中运行。

JSON 文件需要什么结构?

对象数组、在 data 等键下保存该数组的对象,或每行一个对象(NDJSON)。每个键成为一列。

它在各个数据库中使用哪些类型?

每种数据库各有其类型:是/否值在 PostgreSQL 中为 boolean,在 MySQL 和 MariaDB 中为 tinyint(1),在 SQL Server 中为 bit,在 Oracle 中为 NUMBER(1)。本页的表格列出了每种值。

会保留前导零吗?

会。像 000481 这样的代码在每种数据库中都保持为文本,写作 '000481',不会丢失任何零。

能不用脚本直接导入数据吗?

可以。命令行可免费导入 SQLite;使用 IntoSQL Pro,桌面应用和命令行还能导入 PostgreSQL、MySQL 和 MariaDB。SQL Server 和 Oracle 请运行脚本。

JSON 文件可以多大?

NDJSON(每行一个对象)以流式方式读取,因此在浏览器中几 GB 的文件也能处理。JSON 文档需要整体读取,因此上限取决于浏览器分配给本页的内存。桌面应用和命令行可处理任意大小的文件。