1

sqlite3 的 json1 扩展允许查询和操作 JSON 值(存储的 TEXT 字段)。我想将一个新元素附加到驻留在某个 JSON 值(在 SQLite 数据库中)内的 JSON 数组中。不幸的是,在使用动态大小的数组(长度未知)时,对 JSON 数组的支持似乎不是最佳的。

我有一个存储 JSON 值的简单表。

CREATE TABLE T (DATA);

该表中将有 JSON 值,其中包含一个作为根节点的 JSON 数组,例如:

INSERT INTO T VALUES(json_array(1,2,3,4,5));

要附加到路径“$”处的数组(为简单起见),我可以发出以下查询:

UPDATE T SET DATA =
  (SELECT json_insert(DATA,
    '$[' || json_array_length(json_extract(DATA, '$')) || ']', 42));

这可行,但似乎相当可怕;我首先json_extract是数组,然后计算它的长度。然后将该长度连接成一个新的 JSON 路径表达式,然后将其反馈到json_insert以找到正确的位置。获取最后一个元素可以通过相同的方式完成:

SELECT json_extract(DATA,
  '$[' || (json_array_length(json_extract(DATA, '$')) - 1) || ']')
FROM T;

这似乎很麻烦。我希望有类似$[-1]路径的东西,但这似乎不受支持。这可以在 SQLite 中以更优雅的方式解决吗?

4

0 回答 0