WHAT - JSON 能不能当作数据库
文章目录
- 一、适合用 JSON 作为“数据库”的场景
- 二、技术实现方式(常见)
- 1. 前端项目中
- 2. Node.js 后端中
- 三、不适合用 JSON 当数据库的情况
- 四、与真数据库对比
- 五、实际开发建议
答案是:可以,但要分场景。
JSON 本身只是一种数据格式,而不是数据库。不过在很多轻量场景中,JSON 文件 + 读写逻辑 可以扮演数据库的角色,尤其是在以下几类场景中非常实用👇
一、适合用 JSON 作为“数据库”的场景
场景类型 | 示例用途 | 说明 |
---|---|---|
本地小型项目 / Demo | 快速做一个前端/NodeJS demo | 直接 import data.json ,不需要搭数据库 |
配置驱动型项目 | 菜单配置、权限配置、主题配置等 | JSON 格式天然适合描述结构化配置 |
静态数据管理 | 一些固定不变的数据,例如省市区、行业类别等 | 一次加载,多次使用 |
原型 / Mock 数据 | 前后端分离项目开发初期 | 可以直接用 JSON 充当后端返回,前端联调更方便 |
Serverless / Edge 计算 | 无需部署数据库,直接读写 JSON 存储 | 比如 Cloudflare Workers / Vercel Edge Functions |
二、技术实现方式(常见)
1. 前端项目中
-
静态导入
import config from './data.json'; console.log(config.users[0].name);
-
动态加载
fetch('/data/data.json').then(res => res.json()).then(data => console.log(data));
2. Node.js 后端中
-
作为本地“数据库”文件读写
import fs from 'fs';const DB_PATH = './db.json';function readDB() {const raw = fs.readFileSync(DB_PATH, 'utf-8');return JSON.parse(raw); }function writeDB(data) {fs.writeFileSync(DB_PATH, JSON.stringify(data, null, 2)); }
适合做简单的 CRUD 接口。
三、不适合用 JSON 当数据库的情况
不适合的场景 | 原因 |
---|---|
❌ 高并发访问 | JSON 文件不是并发安全的,容易写冲突。严重会损坏文件 |
❌ 大规模数据存储 | 读写性能差,缺乏索引机制 |
❌ 多用户协同修改 | 文件锁和事务管理复杂 |
❌ 需要复杂查询 / 聚合操作 | 只能全量读进内存,查询效率低 |
❌ 生产环境核心业务数据库 | 没有备份、恢复、权限、事务保障等特性 |
四、与真数据库对比
特性 | JSON 文件 | 真数据库(如 MySQL、Postgres、MongoDB) |
---|---|---|
安装复杂度 | 低(只需一个文件) | 高 |
并发处理 | 差 | 好 |
查询性能 | 低 | 高 |
事务支持 | ❌ | ✅ |
索引查询 | ❌ | ✅ |
适用规模 | 小型项目 / 配置 / Mock | 中大型项目 / 生产环境 |
五、实际开发建议
-
✅ 前期/开发阶段 → 可以用 JSON 代替数据库,快速启动。
-
⚠️ 上线/复杂业务 → 迁移到真实数据库(如 SQLite、PostgreSQL、MongoDB)。
-
如果你想保留文件型存储,但又希望有点数据库特性,可以用:
- LowDB(Node.js,基于 JSON)
- NeDB(MongoDB-like)
- SQLite(文件数据库,比 JSON 强太多)
例如用 LowDB:
import { Low } from 'lowdb'
import { JSONFile } from 'lowdb/node'const adapter = new JSONFile('db.json')
const db = new Low(adapter, { users: [] })await db.read()
db.data.users.push({ id: 1, name: 'Tom' })
await db.write()
总结一句话:
JSON 可以当“轻量数据库”使用,但更适合开发期、配置数据或非高并发的业务。
如果你要做真正的业务存储,请考虑 SQLite 或其他数据库。