You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建JSONBlob数据类型?如何查询data.json及SQLite存储JSON的替代方案?

关于JSONBlob创建、JSON数据查询及SQLite存储JSON的替代方案

1. 创建JSONBlob数据类型

SQLite本身没有专门的JSONBlob类型,你可以通过BLOB类型存储JSON的二进制形式实现类似效果:

  • 先创建包含BLOB字段的表:
CREATE TABLE json_data (
    id INTEGER PRIMARY KEY,
    filejson BLOB -- 用于存储JSON的二进制数据
);
  • 插入数据时,将JSON字符串转换为二进制后存入BLOB字段(具体转换逻辑取决于你使用的编程语言,比如Python中可通过json.dumps().encode()完成)。

你给出的两种表结构对应两种存储思路:

idfilejson
1data1.json
2data2.json

这种是存储JSON文件的路径/名称,需要额外管理外部文件;

IDDATA
1data1
3data2

这种是直接存储JSON数据(可选择TEXT或BLOB类型),数据完全托管在数据库内,管理更集中。

2. 查询JSON数据

情况1:JSON以二进制形式存在BLOB字段中

先将BLOB转为TEXT格式,再用SQLite的JSON函数查询:

-- 提取id=1的JSON数据中"name"字段
SELECT JSON_EXTRACT(CAST(filejson AS TEXT), '$.name') 
FROM json_data 
WHERE id = 1;

情况2:存储的是JSON文件路径

需要通过编程语言读取对应文件内容后再解析JSON(比如Python中用open()读取文件,再用json.load()解析),SQL本身无法直接读取外部文件内容。

3. SQLite存储JSON的其他替代方式

  • TEXT类型直接存储JSON字符串:SQLite 3.31.0及以上版本支持完整的JSON函数(如JSON_EXTRACT、JSON_INSERT),直接存TEXT比BLOB更易调试,查询时无需格式转换,是最常用的方案:
CREATE TABLE json_text_data (
    id INTEGER PRIMARY KEY,
    data TEXT CHECK(json_valid(data)) -- 可选:用CHECK约束确保存储的是合法JSON
);
  • 拆分JSON为关系型表:如果JSON结构固定,可将JSON的每个字段拆分为表的列,用纯关系型方式存储,查询效率最高,示例:
CREATE TABLE user_data (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER,
    email TEXT
);
  • 使用JSON虚拟表:借助SQLite的JSON1扩展,用json_each或json_tree虚拟表将JSON展开为行,方便处理嵌套或数组型JSON:
-- 展开data字段中的数组元素
SELECT value 
FROM json_text_data, json_each(data, '$.items') 
WHERE id = 1;

内容的提问来源于stack exchange,提问作者devranjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:31:08