YamlBox

代码生成器 · 5 分钟阅读

JSON 到 SQL:从有效负载到可查询的表

有时,从 JSON 文件到 SQL 查询的最快途径是从中构建一个表。将 JSON 转换为 SQL 一步即可生成模式和行,这对于固定装置、临时分析和本地数据库播种非常理想 - 前提是您将其保留在迁移历史记录之外。

已更新

类型如何从JSON映射到SQL

  • 弦乐→`TEXT`(`VARCHAR(n)`当你知道长度预算时)。
  • 整数→ `INTEGER` / `BIGINT`,小数→ `NUMERIC` 而不是浮点数,特别是对于金钱而言。
  • 布尔值 → `BOOLEAN`。
  • 嵌套对象和数组 → PostgreSQL 中的 `JSONB`,MySQL 8 中的 `JSON` — 或者当数据保留时将它们规范化到子表中。
  • 缺少键 → 可空列,绝不是伪造值的默认值。

生成的表是一个很好的起点,也是一次糟糕的迁移。编写所需的模式,然后使用生成的 SQL 作为列名称和类型的参考。

逃避不是可选的

JSON 中的字符串通常包含撇号 - `O’Brien`、`it's done` - 并手动粘贴到 SQL 中,这样会提前结束字符串文字并中断语句。生成的 INSERT 语句正确地将每个引号加倍,这是转换为您所做的最有用的事情。对于批量插入,请将行包装在一条语句中,以便数据库可以批量写入,而不是逐行提交。

好的用途,坏的用途

用于测试的夹具数据、API导出的本地临时副本、播种演示环境以及回答SQL中的一次性问题都受益于JSON到SQL的转换。生产模式管理不需要:迁移需要审查、索引、约束和回滚路径。生成表,然后手写附带的迁移。

数组和对象:展平还是存储?

如果数组是固定的标量列表,则具有外键的子表可以使查询保持简单。如果它是真正的动态负载(Webhook 主体、第三方元数据),则将其存储为 `JSONB` 并对您查询的路径建立索引是务实的选择。决定您将如何查询它:您过滤或连接的任何内容都属于列。

在浏览器中运行它

数据库导出和 API 转储正是不应上传到未知服务的有效负载。这里的 JSON 到 SQL 转换完全发生在页面中,因此您复制的语句是根据从未离开过您的机器的数据构建的,并且该工具仍然可以离线工作。

JSON 至 SQL — 常见问题

我应该生成哪种SQL方言?

定位您实际运行的数据库 — PostgreSQL 用于 `JSONB`,MySQL 8 用于 `JSON` 和反引号标识符,SQLite 用于轻量级本地工作。它们之间的引用规则和类型名称有所不同,因此按方言重新生成优于手动调整。

我可以将 JSON 数组插入到单个 SQL 列中吗?

是的,在具有 JSON 列类型的数据库中:数组变为 `JSONB` 或 `JSON`,并且您可以使用路径运算符对其进行查询。如果您需要连接或聚合元素,子表是更好的模型。

注入时生成的SQL安全吗?

生成的语句可供您在选择的位置运行,并且字符串值将转义为文字。它们不能替代应用程序代码中的参数化查询——切勿通过在服务器中串联来构建查询。

这篇文章中提到的工具

浏览 19 工具的完整列表

更多文章可供阅读

所有19帖子→