SQLite json_each() 函数使用指南

SQLite json_each() 函数遍历指定 JSON 文档,为每个直接子元素生成一行,最终返回由所有的行组成的结果集。

SQLite json_each() 函数只遍历 JSON 对象或者数组的直接子元素,或者如果元素为原始类型,则遍历元素本身。

SQLite json_each() 函数是一个表值函数,类似的函数有: json_tree()

json_each() 语法

这里是 SQLite json_each() 的语法:

json_each(json, path)

参数

json
必需的。一个 JSON 文档。
path
可选的。一个路径表达式。

返回值

SQLite json_each() 函数返回一个具有以下列的结果集:

key
如果 JSON 为数组,则 key 列为数组的索引;如果 JSON 为对象,则 key 列为对象的成员名称;其他情况, key 列为 NULL
value
当前元素的值。
type
当前元素的 JSON 类型。可能的值: 'null''true''false''integer''real''text''array''object'。 他们与 json_type() 函数相同。
atom
如果 value 是 JSON 原始类型,atom 存储其对应的 SQL 值;否则该列为 NULL
id
标识此行唯一性的一个整数。
parent
父元素的整数 ID。 此列永远为 NULL
fullkey
它是当前行元素的路径。
path
当前行元素的父元素的路径。

json_each() 示例

这里列出了几个常见的 json_each() 用法示例。

示例: 数组

在这个示例中,我们使用 json_each() 函数遍历一个 JSON 数组中的元素:

SELECT * FROM json_each('[1, 2, 3]');
key  value  type     atom  id  parent  fullkey  path
---  -----  -------  ----  --  ------  -------  ----
0    1      integer  1     1           $[0]     $
1    2      integer  2     2           $[1]     $
2    3      integer  3     3           $[2]     $

示例: 对象

在这个示例中,我们使用 json_each() 函数遍历一个 JSON 对象中的元素:

SELECT * FROM json_each('{"x": 1, "y": 2}');
key  value  type     atom  id  parent  fullkey  path
---  -----  -------  ----  --  ------  -------  ----
x    1      integer  1     2           $.x      $
y    2      integer  2     4           $.y      $

示例:指定路径

在这个示例中,我们使用 json_each() 函数遍历一个 JSON 数组中的通过路径指定的元素:

SELECT * FROM json_each('[{"x": 1, "y": 2}]', '$[0]');
key  value  type     atom  id  parent  fullkey  path
---  -----  -------  ----  --  ------  -------  ----
x    1      integer  1     3           $[0].x   $[0]
y    2      integer  2     5           $[0].y   $[0]