日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

PostgreSQL JSON 提取全攻略!復(fù)雜結(jié)構(gòu)輕松解析

admin
2025年5月6日 9:10 本文熱度 583

你知道如何從 JSON 數(shù)組中提取元素嗎?如何從 JSON 對(duì)象中提取一個(gè)鍵的值?

從 JSON 數(shù)組中提取元素

要提取一個(gè) JSON 數(shù)組中的元素,作為一個(gè)JSONB的值,請(qǐng)使用->運(yùn)算符。

下面是使用->運(yùn)算符的語法:

json_array -> n

在此語法中,n用來定位 JSON 數(shù)組中的第 n 個(gè)元素。n 可以是正數(shù)或負(fù)數(shù)。如果 n 為負(fù)數(shù),則運(yùn)算符->返回?cái)?shù)組末尾的元素。

請(qǐng)注意,第一個(gè)元素的索引號(hào)為零,最后一個(gè)元素的索引號(hào)為 -1。

如果第 n 個(gè)元素不存在,則運(yùn)算符->返回null。要將數(shù)組元素提取為文本字符串,可以使用->>運(yùn)算符:

json_array ->> n

提取 JSON 數(shù)組元素的示例

讓我們來探討一些使用運(yùn)算符->->>的例子。

1) 設(shè)置一個(gè)示例表

首先,創(chuàng)建一個(gè)新表,名為employees,用來存儲(chǔ)員工數(shù)據(jù):

CREATE TABLE employees(
   id SERIAL PRIMARY KEY,
   name VARCHAR(255NOT 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) 提取第一個(gè)數(shù)組元素的示例

下面的示例使用 -> 運(yùn)算符,來檢索名為 John Doe 的員工的第一個(gè)電話號(hào)碼:

SELECT
  name,
  phones -> 0 phone
FROM
  employees
WHERE
  name = 'John Doe';

輸出:

   name   |      phone
----------+------------------
 John Doe | "(408) 555-1111"
(1 row)

在這個(gè)例子中,我們以索引號(hào) 0 使用->運(yùn)算符。因此,表達(dá)式phones -> 0,以一個(gè)JSONB的值返回phones數(shù)組中第一個(gè)元素。

要將第一個(gè)電話號(hào)碼提取為文本字符串,可以使用 ->> 運(yùn)算符:

SELECT
  name,
  phones ->> 0 phone
FROM
  employees
WHERE
  name = 'John Doe';

輸出:

   name   |     phone
----------+----------------
 John Doe | (408) 555-1111
(1 row)

3) 提取最后一個(gè)數(shù)組元素的示例

以下示例使用->運(yùn)算符,檢索名為Jane Smith的員工的最后一個(gè)電話號(hào)碼:

SELECT
  name,
  phones -> -1 phone
FROM
  employees
WHERE
  name = 'Jane Smith';

輸出:

    name    |      phone
------------+------------------
 Jane Smith | "(408) 666-3333"
(1 row)

要以一個(gè)JSONB的值來提取最后一個(gè)電話號(hào)碼,可以使用 ->> 運(yùn)算符:

SELECT
  name,
  phones ->> -1 phone
FROM
  employees
WHERE
  name = 'Jane Smith';

輸出:

    name    |     phone
------------+----------------
 Jane Smith | (408) 666-3333
(1 row)

4) 提取一個(gè)不存在的元素

下面的示例使用->運(yùn)算符,檢索名為Jane Smith的員工的第 4 個(gè)電話號(hào)碼:

SELECT
  name,
  phones -> 3 phone
FROM
  employees
WHERE
  name = 'Jane Smith';

輸出:

    name    | phone
------------+-------
 Jane Smith | null
(1 row)

由于 Jane Smith 只有 3 個(gè)電話號(hào)碼,因此查詢返回NULL

提取對(duì)象值

要通過鍵提取一個(gè) JSON 對(duì)象中的一個(gè)值,可以使用 -> 運(yùn)算符:

object -> 'key'

-> 運(yùn)算符將 ‘key’ 的值以一個(gè) JSONB 值返回。如果該鍵不存在,則 -> 運(yùn)算符返回 null。

如果要將值以一個(gè) SQL 值返回,則可以使用 ->> 運(yùn)算符:

object ->> 'key'

提取 JSON 對(duì)象值的示例

1) 設(shè)置一個(gè)示例表

首先,創(chuàng)建一個(gè)新表,名為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) 從一個(gè) JSON 對(duì)象中提取值

下面的示例使用->運(yùn)算符,提取員工號(hào)為 1 的請(qǐng)求的當(dāng)前職位:

SELECT
  data -> 'current_position' current_position
FROM
  requests
WHERE
  employee_id = 1;

輸出:

  current_position
---------------------
 "Software Engineer"
(1 row)

返回值是一個(gè) JSONB 值。

要將當(dāng)前職位以一個(gè)文本字符串返回,可以使用->>運(yùn)算符:

SELECT
  data ->> 'current_position' current_position
FROM
  requests
WHERE
  employee_id = 1;

輸出:

 current_position
-------------------
 Software Engineer
(1 row)

3) 提取一個(gè)不存在的鍵

下面的示例嘗試從 JSON 對(duì)象中提取一個(gè)不存在的鍵的值:

SELECT
  data ->> 'position' position
FROM
  requests
WHERE
  employee_id = 1;

輸出:

 position
----------
 null
(1 row)

概括

  • ? 使用json_array -> njson_array ->> n運(yùn)算符,指定一個(gè)索引號(hào),將 JSON 數(shù)組元素提取為一個(gè)JSONB的值或文本字符串。
  • ? 使用json_object -> 'key'json_object ->> 'key'運(yùn)算符,指定一個(gè)鍵,從一個(gè)對(duì)象中提取一個(gè) JSONB 的值或文本字符串。

?

閱讀原文:https://mp.weixin.qq.com/s/AcVZ6V0cGuq-egb7xLFzVA


該文章在 2025/5/6 10:52:29 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 在线欧美日韩亚洲国产一区 | 国产系列丝袜熟女精品网站 | 大香区一二三四区2025 | 大香伊蕉在人线国产最新75 | 国产欧美精品一区 | 国产亚洲日本精品成人专区 | 亚洲日本一区二区在线观看 | 一二三区免费视频 | 日韩在线电影大全免费观看 | 亚洲精品中文字幕不卡 | 亚洲一区二区精品成人 | 亚洲国产v片在线 | 国产伦亲子伦亲子视频观看 | 91精品啪在线观看国产老人令品 | 大色综合色综合资源站 | 亚洲精品成人一区二区aⅴ 精品国产成a人在线观看 | 精品一区二区三区免费视频 | 伊人影视频 | 亚洲91精品| 真实国产熟睡乱子伦视频 | 在线观看日本亚洲一区 | 日韩在线观看网站 | 国产亚洲欧美日韩国产片 | 一级a看片免费视频 | 精品综合国产高清 | 美女网站在线免费观看 | 夜夜爽一区二区三 | 精品综合国产一区二区三区码码 | 电话耳麦| 日韩欧美精品成人免费高清 | 羞羞影院午夜男女爽爽视频 | 吖v国产在线高清播放 | 一区二区三区四区无限乱码 | 成人看的羞羞视频免费观看 | 欧美亚洲综合色 | 日韩成人 | aⅴ日本亚洲欧洲免费天堂 加勒比综合网 | 亚洲成年看| 日本一区欧美国产日韩 | 国产美日韩精品一区二区在线观看 | 日韩最新免费视频一区二区 |