Error: no such function: json_each in SQLite with JSON1 installed

Error: no such function: json_each in SQLite with JSON1 installed

我已经通过 brew JSON1 安装了 SQLite3:

brew install sqlite3 --with-json1 --with-fts5

版本:

3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8

当运行查询时,一些函数可以正常工作,例如json_extract:

sqlite> SELECT json_extract(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

["foo","bar","baz"]

但是,当我尝试使用 json_eachjson_tree 时,它失败了:

sqlite> SELECT json_each(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

Error: no such function: json_each

Event table 中的 Body 字段是有效的 JSON 字符串:

{"issue":{"fields":{"labels": ["foo","bar","baz"]}}}

labels 值是一个数组。

我已阅读文档(并查看了 json_each examples),搜索了互联网,但找不到启用此功能的任何其他要求。

我做错了什么,或者:我如何从 json_each/json_tree 中获益?

AFAIK,您不能在查询中使用 json_each()json_tree() 作为字段,它们是 table-valued functions。您只能像表格一样使用它们。

问题是 json_eachjson_treetable 值函数 这意味着它们只能用于获取数据在内存中已经存在的虚拟 table 上,而不是直接从数据库中查询数据。

参见:The Virtual Table Mechanism Of SQLite

2.1.2. Table-valued functions

A virtual table that contains hidden columns can be used like a table-valued function in the FROM clause of a SELECT statement. The arguments to the table-valued function become constraints on the HIDDEN columns of the virtual table.

SELECT json_each(Body, '$.issue.fields.labels') ... sqlite3 找不到与其 SELECT 定义匹配的函数并导致您看到的错误时。