3

我已经通过 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_eachorjson_tree时,它失败了:

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

Error: no such function: json_each

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

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

并且labels值是一个数组。

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

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

4

2 回答 2

3

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

参见:SQLite 的虚拟表机制

2.1.2. 表值函数

包含隐藏列的虚拟表可以像 SELECT 语句的 FROM 子句中的表值函数一样使用。表值函数的参数成为虚拟表的 HIDDEN 列的约束。

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

于 2016-12-24T06:13:37.750 回答
2

AFAIK,您不能在查询中使用json_each()andjson_tree()作为字段,它们是表值函数。你只能像桌子一样使用它们。

于 2016-12-24T06:03:45.533 回答