你知道如何從 JSON 數組中提取元素嗎?如何從 JSON 對象中提取一個鍵的值?
從 JSON 數組中提取元素 要提取一個 JSON 數組中的元素,作為一個 JSONB
的值,請使用 ->
運算符。
下面是使用 ->
運算符的語法:
json_array - > n
在此語法中, n
用來定位 JSON 數組中的第 n 個元素。n 可以是正數或負數。如果 n 為負數,則運算符 ->
返回數組末尾的元素。
請注意,第一個元素的索引號為零,最后一個元素的索引號為 -1。
如果第 n 個元素不存在,則運算符 ->
返回 null
。要將數組元素提取為文本字符串,可以使用 ->>
運算符:
json_array - >> n
提取 JSON 數組元素的示例 讓我們來探討一些使用運算符 ->
和 ->>
的例子。
1) 設置一個示例表 首先, 創建一個新表 ,名為 employees
,用來存儲員工數據:
CREATE TABLE employees( id SERIAL PRIMARY KEY , name VARCHAR ( 255 ) NOT NULL , phones JSONB NOT NULL );
第二步, 插入一些行 到 employees
表中:
INSERT INTO employees (name, phones) VALUES ( 'John Doe' , '["(408) 555-1111", "(408) 555-2222", "(408) 555-3333"]' ), ( 'Jane Smith' , '["(408) 666-1111", "(408) 666-2222", "(408) 666-3333"]' ) RETURNING * ;
輸出:
id | name | phones ----+------------+-------------------------------------------------------- 1 | John Doe | ["(408) 555-1111", "(408) 555-2222", "(408) 555-3333"] 2 | Jane Smith | ["(408) 666-1111", "(408) 666-2222", "(408) 666-3333"] (2 rows)
2) 提取第一個數組元素的示例 下面的示例使用 -> 運算符,來檢索名為 John Doe 的員工的第一個電話號碼:
SELECT name, phones - > 0 phone FROM employees WHERE name = 'John Doe' ;
輸出:
name | phone ----------+------------------ John Doe | "(408) 555-1111" (1 row)
在這個例子中,我們以索引號 0 使用 ->
運算符。因此,表達式 phones -> 0
,以一個 JSONB
的值返回 phones
數組中第一個元素。
要將第一個電話號碼提取為文本字符串,可以使用 ->> 運算符:
SELECT name, phones - >> 0 phone FROM employees WHERE name = 'John Doe' ;
輸出:
name | phone ----------+---------------- John Doe | (408) 555-1111 (1 row)
3) 提取最后一個數組元素的示例 以下示例使用 ->
運算符,檢索名為 Jane Smith
的員工的最后一個電話號碼:
SELECT name, phones - > -1 phone FROM employees WHERE name = 'Jane Smith' ;
輸出:
name | phone ------------+------------------ Jane Smith | "(408) 666-3333" (1 row)
要以一個 JSONB
的值來提取最后一個電話號碼,可以使用 ->> 運算符:
SELECT name, phones - >> -1 phone FROM employees WHERE name = 'Jane Smith' ;
輸出:
name | phone ------------+---------------- Jane Smith | (408) 666-3333 (1 row)
4) 提取一個不存在的元素 下面的示例使用 ->
運算符,檢索名為 Jane Smith
的員工的第 4 個電話號碼:
SELECT name, phones - > 3 phone FROM employees WHERE name = 'Jane Smith' ;
輸出:
name | phone ------------+------- Jane Smith | null (1 row)
由于 Jane Smith 只有 3 個電話號碼,因此查詢返回 NULL
。
提取對象值 要通過鍵提取一個 JSON 對象中的一個值,可以使用 -> 運算符:
object - > 'key'
-> 運算符將 ‘key’ 的值以一個 JSONB 值返回。如果該鍵不存在,則 -> 運算符返回 null。
如果要將值以一個 SQL 值返回,則可以使用 ->> 運算符:
object - >> 'key'
提取 JSON 對象值的示例 1) 設置一個示例表 首先,創建一個新表,名為 requests
:
CREATE TABLE requests( id SERIAL PRIMARY KEY , employee_id INT NOT NULL , request_date DATE NOT NULL , data JSONB NOT NULL );
第二步,向 requests
表中插入一些行:
INSERT INTO requests (request_date, employee_id, data) VALUES ( '2024-02-23' , 1 , '{"current_position": "Software Engineer", "new_position": "Senior Software Engineer", "effective_date": "2024-03-01"}' ), ( '2024-02-24' , 2 , '{"current_position": "Data Analyst", "new_position": "Senior Data Analyst", "effective_date": "2024-03-15"}' ), ( '2024-02-25' , 3 , '{"current_position": "Marketing Manager", "new_position": "Senior Marketing Manager", "effective_date": "2024-04-01"}' ) RETURNING * ;
輸出:
id | employee_id | request_date | data ----+-------------+--------------+----------------------------------------------------------------------------------------------------------------------- 1 | 1 | 2024-02-23 | {"new_position": "Senior Software Engineer", "effective_date": "2024-03-01", "current_position": "Software Engineer"} 2 | 2 | 2024-02-24 | {"new_position": "Senior Data Analyst", "effective_date": "2024-03-15", "current_position": "Data Analyst"} 3 | 3 | 2024-02-25 | {"new_position": "Senior Marketing Manager", "effective_date": "2024-04-01", "current_position": "Marketing Manager"} (3 rows)
2) 從一個 JSON 對象中提取值 下面的示例使用 ->
運算符,提取員工號為 1 的請求的當前職位:
SELECT data - > 'current_position' current_position FROM requests WHERE employee_id = 1 ;
輸出:
current_position --------------------- "Software Engineer" (1 row)
返回值是一個 JSONB 值。
要將當前職位以一個文本字符串返回,可以使用 ->>
運算符:
SELECT data - >> 'current_position' current_position FROM requests WHERE employee_id = 1 ;
輸出:
current_position ------------------- Software Engineer (1 row)
3) 提取一個不存在的鍵 下面的示例嘗試從 JSON 對象中提取一個不存在的鍵的值:
SELECT data - >> 'position' position FROM requests WHERE employee_id = 1 ;
輸出:
position ---------- null (1 row)
概括 ? 使用 json_array -> n
和 json_array ->> n
運算符,指定一個索引號,將 JSON 數組元素提取為一個 JSONB
的值或文本字符串。 ? 使用 json_object -> 'key'
和 json_object ->> 'key'
運算符,指定一個鍵,從一個對象中提取一個 JSONB 的值或文本字符串。 ?
閱讀原文:https://mp.weixin.qq.com/s/AcVZ6V0cGuq-egb7xLFzVA
該文章在 2025/5/6 10:52:29 編輯過