代码生成器 · 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安全吗?
生成的语句可供您在选择的位置运行,并且字符串值将转义为文字。它们不能替代应用程序代码中的参数化查询——切勿通过在服务器中串联来构建查询。
这篇文章中提到的工具
更多文章可供阅读
6 分钟阅读
JSON至TypeScript:符合实际的类型
将真实 API 响应(可选键、空联合、嵌套类型)的 JSON 接口转换为 TypeScript 接口,并防止生成的类型发生漂移。
5 分钟阅读
JSON 到 Go:第一次尝试时解组的结构
将 JSON 转换为具有正确字段名称和 json 标签的 Go 结构,包括嵌套类型 - 以及要观察的数字、null 和时间陷阱。
5 分钟阅读
CSV 到 JSON:从电子表格到结构化数据
在浏览器中将 CSV 转换为 JSON — 解释了标题行、分隔符、引用规则和类型处理,以及破坏解析器的电子表格导出。
- 较长的文章可供阅读: JSON 至 TypeScript:说实话的类型