使用带有SQLite / json1扩展的数组(append,tail)

时间:2018-03-22 07:34:52

标签: sqlite sqlite-json1

sqlite3的json1扩展允许查询和操作JSON值(存储的TEXT字段)。我想将一个新元素追加到一个JSON数组中,该数组驻留在一些JSON值中(在SQLite数据库中)。 不幸的是,当使用动态大小的数组(长度未知)时,对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中以更优雅的方式解决吗?

0 个答案:

没有答案