SQLite 的 JSON 扩展如何使用?
SQLite 的 JSON 扩展提供了处理 JSON 数据的能力:JSON 扩展概述SQLite 3.38.0+ 内置 JSON1 扩展提供了一组函数用于创建、查询和操作 JSON 数据JSON 数据以 TEXT 类型存储在数据库中JSON 函数分类创建函数:jsonarray()、jsonobject()提取函数:jsonextract()、jsoneach()修改函数:jsonset()、jsonremove()查询函数:jsonarraylength()、json_type()路径函数:jsonpatch()、jsontree()创建 JSON 数据 -- 创建 JSON 对象 SELECT json_object('name', 'Alice', 'age', 30); -- 输出: {"name":"Alice","age":30} -- 创建 JSON 数组 SELECT json_array(1, 2, 3, 'four'); -- 输出: [1,2,3,"four"]提取 JSON 数据 -- 提取 JSON 字段 SELECT json_extract('{"name":"Alice","age":30}', '$.name'); -- 输出: "Alice" -- 提取嵌套字段 SELECT json_extract('{"user":{"name":"Alice"}}', '$.user.name'); -- 输出: "Alice"修改 JSON 数据 -- 设置或更新 JSON 字段 SELECT json_set('{"name":"Alice"}', '$.age', 30); -- 输出: {"name":"Alice","age":30} -- 删除 JSON 字段 SELECT json_remove('{"name":"Alice","age":30}', '$.age'); -- 输出: {"name":"Alice"}查询 JSON 数据 -- 获取 JSON 数组长度 SELECT json_array_length('[1,2,3,4]'); -- 输出: 4 -- 获取 JSON 字段类型 SELECT json_type('{"name":"Alice","age":30}', '$.age'); -- 输出: integer在表中使用 JSON -- 创建包含 JSON 字段的表 CREATE TABLE users ( id INTEGER PRIMARY KEY, data TEXT ); -- 插入 JSON 数据 INSERT INTO users (data) VALUES (json_object('name', 'Alice', 'tags', json_array('admin', 'user'))); -- 查询 JSON 数据 SELECT json_extract(data, '$.name') as name FROM users; -- 基于 JSON 字段过滤 SELECT * FROM users WHERE json_extract(data, '$.name') = 'Alice';JSON 路径表达式$:根对象.key:对象属性[index]:数组索引*:通配符..:递归下降性能考虑JSON 查询比直接查询列慢可以使用生成列和索引优化 JSON 查询 CREATE TABLE users ( id INTEGER PRIMARY KEY, data TEXT, name TEXT GENERATED ALWAYS AS (json_extract(data, '$.name')) STORED ); CREATE INDEX idx_name ON users(name);使用场景存储灵活的数据结构存储配置信息存储日志和元数据实现 NoSQL 风格的数据存储JSON 扩展使 SQLite 能够处理半结构化数据,增强了数据库的灵活性。