PostgreSQL jsonb_extract_path() 函数使用指南
PostgreSQL jsonb_extract_path()
函数从一个指定的 JSONB 对象中根据指定的路径提取 JSONB 子对象。
jsonb_extract_path()
语法
这是 PostgreSQL jsonb_extract_path()
函数的语法:
jsonb_extract_path(from_json JSONB, VARIADIC path TEXT[]) -> JSONB
参数
from_json
- 必需的。 要从中提取 JSONB 子对象的 JSONB 对象。
path
- 必需的。 是一个可变的参数列表。它指定了要提取的路径。前面的路径应该包含有序的路径。
返回值
PostgreSQL jsonb_extract_path()
函数返回一个 JSONB 子对象,它是指定的 JSONB 对象中指定的路径上的 JSONB 值。
当可变参数列表 path
中有个多个参数时,前面的路径应该包含后面的路径,这样才能够在 JSONB 对象中提取到值。
如果路径不存在,jsonb_extract_path()
函数返回 null。
jsonb_extract_path()
示例
JSONB 数组示例
本示例展示了如何使用 PostgreSQL jsonb_extract_path()
函数从一个 JSONB 数组的指定索引上提取值。
SELECT
jsonb_extract_path('[1, 2, [3, 4]]', '0') AS "#[0]",
jsonb_extract_path('[1, 2, [3, 4]]', '1') AS "#[1]",
jsonb_extract_path('[1, 2, [3, 4]]', '2') AS "#[2]";
#[0] | #[1] | #[2]
------+------+--------
1 | 2 | [3, 4]
这里,我们分别提取了索引为 0,1,和 2 上值,jsonb_extract_path()
函数也给出了正确的反馈。
如果我们想要提取 索引为 2 的内嵌数组中的值,该怎么做呢? 请使用下面的语句:
SELECT
jsonb_extract_path('[1, 2, [3, 4]]', '2', '0') AS "#[2][0]",
jsonb_extract_path('[1, 2, [3, 4]]', '2', '1') AS "#[2][1]";
#[2][0] | #[2][1]
---------+---------
3 | 4
这里,我们在可变参数 path
中先使用 '2'
,再使用 '0'
,这相当于如下的计算步骤:
jsonb_extract_path('[1, 2, [3, 4]]', '2')
返回了[3, 4]
jsonb_extract_path('[3, 4]', '0')
返回了3
JSONB 对象示例
本示例展示了如何使用 PostgreSQL jsonb_extract_path()
函数从一个 JSONB 对象的指定路径上提取值。
SELECT
jsonb_extract_path('{"a": 1, "b": {"x": 2, "y": 3}}', 'a') AS "#.a",
jsonb_extract_path('{"a": 1, "b": {"x": 2, "y": 3}}', 'b') AS "#.b";
#.a | #.b
-----+------------------
1 | {"x": 2, "y": 3}
当然,您也可以通过指定多个路径来提取子对象中内嵌的值,比如:
SELECT
jsonb_extract_path('{"a": 1, "b": {"x": 2, "y": 3}}', 'b', 'x') AS "#.b.x",
jsonb_extract_path('{"a": 1, "b": {"x": 2, "y": 3}}', 'b', 'y') AS "#.b.y";
#.b.x | #.b.y
-------+-------
2 | 3