第十章 JSON 与 JSONB 数据类型深度解析 - 第三节:支持的操作符与函数
文章目录
第三节 支持的操作符与函数
目标:全面了解 PostgreSQL 为
JSONB提供的丰富操作符和函数,掌握数据提取、修改和处理的核心工具。
除了上一节介绍的用于索引优化的 @>、? 等操作符外,PostgreSQL 还提供了一整套强大的工具集来处理 JSONB 数据。本节将分类介绍最常用的操作符和函数。
一、数据提取操作符
这些操作符用于从 JSONB 文档中获取数据。
| 操作符 | 返回类型 | 描述 | 示例 |
|---|---|---|---|
-> | jsonb | 按键(对象)或索引(数组)提取子 JSONB | '{"a": {"b": 1}}'::jsonb -> 'a' -> {"b": 1} |
->> | text | 按键或索引提取值为文本 | '{"a": 1}'::jsonb ->> 'a' -> '1' |
#> | jsonb | 按路径提取子 JSONB | '{"a": {"b": [1,2]}}'::jsonb #> '{a,b,1}' -> 2 |
#>> | text | 按路径提取值为文本 | '{"a": {"b": [1,2]}}'::jsonb #>> '{a,b,1}' -> '2' |
关键区别:
- 单箭头
->返回jsonb,双箭头->>返回text。 #>和#>>使用一个文本数组'{key,index,...}'来表示路径,非常适合提取深层嵌套的数据。
示例:
| |
二、JSONB 修改与合并
1. 合并操作符 ||
|| 操作符用于将两个 JSONB 值合并成一个新的 JSONB 值。
- 合并对象:如果键冲突,右侧的值会覆盖左侧的值。
- 合并数组:直接将两个数组连接起来。
| |
2. 删除操作符 - 和 #-
-: 从对象中按键删除,或从数组中按索引删除。#-: 按路径删除。
| |
3. jsonb_set() 函数
jsonb_set() 是一个更强大的更新函数,它可以在指定路径上替换或插入值。
jsonb_set(target, path, new_value, [create_if_missing])
| |
三、常用的 JSONB 创建和处理函数
| 函数 | 描述 |
|---|---|
jsonb_build_object(...) | 从键值对列表创建 JSONB 对象。 |
jsonb_build_array(...) | 从元素列表创建 JSONB 数组。 |
jsonb_pretty(...) | 将 JSONB 格式化为带缩进的可读文本。 |
jsonb_typeof(...) | 返回 JSONB 值的顶层类型 (object, array, string, number, boolean, null)。 |
jsonb_array_length(...) | 返回 JSONB 数组的长度。 |
jsonb_object_keys(...) | 以集合形式返回 JSONB 对象的所有顶层键。 |
jsonb_each(...) | 将 JSONB 对象展开为键值对集合。 |
jsonb_array_elements(...) | 将 JSONB 数组展开为元素集合。 |
示例:
| |
📌 小结
PostgreSQL 为 JSONB 提供了一个功能极其丰富的“工具箱”。
- 提取数据:使用
->,->>,#>,#>>来精确获取你需要的信息。 - 修改数据:使用
||,-,#-和jsonb_set来动态地构建和修改 JSON 文档。 - 处理数据:利用各种
jsonb_*函数,可以在 SQL层面完成复杂的 JSON 创建和解构任务。
熟练掌握这些操作符和函数,你就可以在 PostgreSQL 中像操作原生 NoSQL 数据库一样,灵活自如地处理半结构化数据。在下一节,我们将通过一个实战案例,将这些工具融会贯通。
