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