Javascript is required

将嵌套 JSON 数据打平并生成可复核的 MySQL/PostgreSQL/SQLite INSERT 草稿

讲解如何将多层嵌套的 JSON 对象展开为关系型数据库列名,并按 SQL 方言规则生成需要人工复核的 INSERT 草稿。

作者: Tiny's Tool Core Team更新: 2026-08-04

INTERACTIVE TOOL DIAGNOSTIC WORKBENCH

在浏览器本地尝试对应的调试工具

JSON 转 SQL 转换器

1. 什么是嵌套 JSON 转 SQL?

在将 NoSQL 文档数据库(如 MongoDB)数据迁移至关系型数据库,或解析复杂 REST/GraphQL 接口时,开发者经常需要将 JSON 记录导入到关系型数据库(如 MySQL、PostgreSQL 或 SQLite)中。

然而,JSON 对象中常包含多层嵌套的子对象(例如 {"user": {"profile": {"age": 28}}}),这无法直接映射到二维的关系型数据库表结构中。

2. 核心转换痛点

  1. 嵌套结构打平 (Flattening):需要将多层嵌套对象递归展开为以下划线连接的列名(如 user_profile_age)。
  2. SQL 方言标识符转义
  • MySQL:使用反引号转义列名与表名
  • PostgreSQL:使用双引号转义列名与表名
  • SQLite:使用标准转义格式
  1. 字面量转义与参数绑定边界:本工具输出经过字面量转义的迁移草稿;生产应用写库仍必须使用数据库驱动或 ORM 的参数绑定。

3. 对象递归打平算法代码

ts
export function flattenJsonObject(obj: Record<string, any>, prefix = ""): Record<string, any> {
    const result: Record<string, any> = {};
    for (const key of Object.keys(obj)) {
        const val = obj[key];
        const newKey = prefix ? prefix + "_" + key : key;
        if (val !== null && typeof val === "object" && !Array.isArray(val)) {
            Object.assign(result, flattenJsonObject(val, newKey));
        } else {
            result[newKey] = val;
        }
    }
    return result;
}

4. 常见问题解答 (FAQ)

Q1: JSON 中的嵌套数组在转换为 SQL 时如何处理?

包含基础值或对象的数组会被自动序列化为标准的 JSON 字符串(如 '["admin", "dev"]'),方便直接插入到 MySQL 5.7+ 或 PostgreSQL 的 JSONTEXT 字段类型中。

Q2: 本站的 JSON 转 SQL 工具支持哪些数据库方言?

支持 MySQL(反引号包裹)、PostgreSQL(双引号包裹)及 SQLite 语法,并能自动处理布尔值在不同方言下的映射(1/0TRUE/FALSE)。

Q3: 数据是否上传,生成结果可以直接执行吗?

转换在浏览器内存中完成,不会主动上传粘贴的 JSON。输出应作为草稿人工复核,并保留原始数据;应用程序写库必须继续使用参数化查询。