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

使用SQLite/json1扩展处理数组(追加、获取尾部元素)

给SQLite中TEXT字段的动态JSON数组追加元素的解决方案

嘿,我明白你遇到的问题了——用SQLite的json1扩展处理未知长度的JSON数组追加确实需要点技巧,不过其实有现成的函数能完美解决这个问题。我来给你一步步拆解:

核心方法:用json_append或json_array_insert实现动态追加

SQLite的json1扩展提供了两个函数可以轻松向数组末尾追加元素,完全不需要提前知道数组的长度:

方法1:json_append(最直接)

json_append函数针对数组类型的JSON,会自动把后续参数追加到数组的末尾。语法如下:

UPDATE T
SET DATA = json_append(DATA, '$', 要追加的元素)
WHERE json_type(DATA) = 'array'; -- 可选,确保只处理有效的数组

举个实际例子:
假设你的表已经有了[1,2,3]这条数据,要追加元素4,执行:

UPDATE T SET DATA = json_append(DATA, '$', 4);

查询结果会变成[1,2,3,4]。如果要一次性追加多个元素,直接在后面加就行:

UPDATE T SET DATA = json_append(DATA, '$', 4, 5, 'hello');

结果就是[1,2,3,4,5,"hello"]。

方法2:json_array_insert(用$[#]定位末尾)

json_array_insert需要指定插入的位置,而$[#]这个特殊路径表示数组当前长度对应的位置(也就是末尾之后),同样能实现追加效果:

UPDATE T
SET DATA = json_array_insert(DATA, '$[#]', 4)
WHERE json_type(DATA) = 'array';

这个方法和json_append的效果完全一致,选你顺手的用就行。

追加复杂JSON元素(对象/嵌套数组)

如果要追加的不是简单值,而是JSON对象或嵌套数组,记得用json()函数包装一下,避免字符串转义问题:

-- 追加一个JSON对象
UPDATE T SET DATA = json_append(DATA, '$', json('{"name": "Alice", "age": 30}'));

-- 追加一个嵌套数组
UPDATE T SET DATA = json_append(DATA, '$', json('[6,7,8]'));

这样插入的是真正的JSON元素,而不是字符串形式的JSON文本。

注意事项

  • 确保你的SQLite版本在3.9.0以上(json1扩展从这个版本开始默认内置,不需要额外加载)。
  • 加上WHERE json_type(DATA) = 'array'的条件,可以避免处理无效的JSON或非数组类型的数据,防止字段被更新为NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:17