logo

PostgreSQL 中 JSON 数据的操作方法及示例详解

本站 2026
在PostgreSQL数据库中,JSON数据类型是一个强大的功能特性,它允许存储和查询复杂的、非结构化的或半结构化数据。作为NoSQL风格的数据处理能力与传统关系型数据库的完美结合,PostgreSQL对JSON的支持包括了一系列丰富且实用的功能函数以及操作符来进行创建、读取、更新及删除等CRUD操作。

**一、插入和检索JSON**

首先,在PostgreSQL中可以将任意有效的JSON对象直接存入一个json或者jsonb字段(其中jsonb是二进制形式储存并支持索引优化)。例如:

sql

INSERT INTO table_name (json_column) VALUES ('{"name": "John", "age": 30, "city": "New York"}');


要从表中获取这个JSON值也很简单:

sql

SELECT json_column FROM table_name;

这将会返回整个JSON文档内容。

**二、解析和提取JSON中的元素**

对于更复杂的情况,比如需要访问嵌套在JSON内的特定键对应的值时,我们可以使用`->>`运算符来抽取文本类型的值:

sql

-- 提取出"person.json_data ->> 'name'"
SELECT json_column->>'name' AS name FROM table_name;

-- 输出: John


如果想获得具体的原始JSON数组/对象(内部仍为JSON格式),则可采用 `->` 运算符:

sql

-- 获取“address”对象的所有详细信息
SELECT json_column->'address' as address_info FROM table_name;


另外还有诸如 `#>>`, `#- >` 等路径表达式用于深度查找多个层级的键值:

sql

-- 深度提取多级key:"details -> 'personal' ->> 'email'"
SELECT json_column #>> '{details,personal,email}' AS email_address from table_name;


**三、修改JSON数据**

若需向现有JSON条目添加新项或更改已有项目,则可通过组合现有的JSON构造器函数如`||`(合并)或替换原有指定键的方法实现:

sql

UPDATE table_name SET json_column = json_column || '{"hobby": ["reading"]}'
WHERE id = some_id;

UPDATE table_name
SET json_column=json_build_object(
'name', json_column->>'name',
'age', json_column->>'age',
'new_field', 'some_value'
)
WHERE ...


**四、条件筛选基于JSON属性**

PostgreSQL提供了一种强大而灵活的方式进行带有JSON字段的过滤查询。以下是如何利用@>, ?| 和 ?& 条件运算符的例子:

1. 使用 @> 测试是否包含给定的对象:

sql

SELECT * FROM table WHERE json_column @> '{"age": 30}';


2. 使用 ?| 查找至少拥有提供的任何关键字的记录:

sql

SELECT * FROM table WHERE json_column ?| array['name','age'];


3. 而通过 ?&, 可以检查某个JSON对象是否有全部列出的关键字:

```sql
SELECT * FROM table WHERE json_column ?& ARRAY ['education', 'experience'];

以上即是在PostgreSQL中关于JSON数据的一系列基本操作方法及其实际应用案例详述。实际上,针对JSON的各种高级应用场景还涉及到更多的内置函数和支持性语法,使得用户能够充分利用这一丰富的特性和灵活性管理其应用程序中的JSON数据需求。

标签: postgresqljson操作