MySQL數(shù)據(jù)庫(kù)函數(shù)之JSON_EXTRACT示例代碼
前言
在 MySQL 中,JSON_EXTRACT() 函數(shù)用于從 JSON 文檔中提取一個(gè)或多個(gè)值。這個(gè)函數(shù)非常有用,特別是在處理存儲(chǔ)在 JSON 格式中的復(fù)雜數(shù)據(jù)時(shí)。下面是一些關(guān)于如何使用 JSON_EXTRACT() 的詳細(xì)說(shuō)明和示例。
基本語(yǔ)法
JSON_EXTRACT(json_doc, path [, path] ...)
json_doc: 要從中提取值的 JSON 文檔。path: 一個(gè)或多個(gè)路徑表達(dá)式,用于指定要提取的值的位置。路徑表達(dá)式以$開頭,表示 JSON 文檔的根。
路徑表達(dá)式
路徑表達(dá)式使用類似于 JavaScript 的對(duì)象和數(shù)組訪問(wèn)語(yǔ)法:
- 對(duì)象屬性:使用點(diǎn)
.訪問(wèn),例如$.name。 - 數(shù)組元素:使用方括號(hào)
[]訪問(wèn),例如$[0]。 - 嵌套結(jié)構(gòu):可以組合使用點(diǎn)和方括號(hào),例如
$.address.street或$.items[0].name。
示例
示例 1: 提取簡(jiǎn)單值
假設(shè)有一個(gè)表 users,其中有一個(gè)字段 data 存儲(chǔ)了用戶的 JSON 數(shù)據(jù):
CREATE TABLE users (
id INT PRIMARY KEY,
data JSON
);
INSERT INTO users (id, data) VALUES
(1, '{"name": "Alice", "age": 30, "city": "New York"}'),
(2, '{"name": "Bob", "age": 25, "city": "Los Angeles"}');
我們可以使用 JSON_EXTRACT() 提取每個(gè)用戶的名字:
SELECT id, JSON_EXTRACT(data, '$.name') AS name FROM users;
輸出結(jié)果:
+----+--------+ | id | name | +----+--------+ | 1 | "Alice"| | 2 | "Bob" | +----+--------+
示例 2: 提取嵌套值
假設(shè) JSON 數(shù)據(jù)中包含嵌套的對(duì)象:
INSERT INTO users (id, data) VALUES
(3, '{"name": "Charlie", "age": 35, "address": {"street": "123 Main St", "city": "Chicago"}}');
我們可以提取嵌套的街道地址:
SELECT id, JSON_EXTRACT(data, '$.address.street') AS street FROM users;
輸出結(jié)果:
+----+-----------------+ | id | street | +----+-----------------+ | 1 | NULL | | 2 | NULL | | 3 | "123 Main St" | +----+-----------------+
示例 3: 提取數(shù)組中的值
假設(shè) JSON 數(shù)據(jù)中包含一個(gè)數(shù)組:
INSERT INTO users (id, data) VALUES
(4, '{"name": "David", "age": 40, "hobbies": ["reading", "traveling", "cooking"]}');
我們可以提取數(shù)組中的第一個(gè)愛(ài)好:
SELECT id, JSON_EXTRACT(data, '$.hobbies[0]') AS hobby FROM users;
輸出結(jié)果:
+----+----------+ | id | hobby | +----+----------+ | 1 | NULL | | 2 | NULL | | 3 | NULL | | 4 | "reading"| +----+----------+
注意事項(xiàng)
JSON_EXTRACT()返回的結(jié)果是一個(gè) JSON 值,即使它是標(biāo)量值(如字符串或數(shù)字)。如果需要將結(jié)果轉(zhuǎn)換為標(biāo)量類型,可以使用CAST函數(shù)。例如:SELECT id, CAST(JSON_EXTRACT(data, '$.name') AS CHAR) AS name FROM users;
如果路徑表達(dá)式指向的值不存在,
JSON_EXTRACT()將返回NULL。路徑表達(dá)式中的索引是從 0 開始的。
總結(jié)
到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)函數(shù)之JSON_EXTRACT的文章就介紹到這了,更多相關(guān)MySQL函數(shù)JSON_EXTRACT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
銀河麒麟V10安裝MySQL5.7的詳細(xì)過(guò)程
這篇文章主要介紹了銀河麒麟V10安裝MySQL5.7,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
mysql?子查詢的概述和分類及單行子查詢功能實(shí)現(xiàn)
本文詳細(xì)介紹了MySQL的子查詢概念和應(yīng)用,解釋了子查詢是在主查詢中嵌套另一個(gè)查詢,包括外查詢和內(nèi)查詢,并從多個(gè)角度進(jìn)行分類,文章還深入探討了子查詢的編寫技巧和使用場(chǎng)景,對(duì)于學(xué)習(xí)和應(yīng)用MySQL的人來(lái)說(shuō),這是一篇非常有價(jià)值的指南2024-10-10
MySQL進(jìn)行g(shù)roup by字段返回大量異常結(jié)果的問(wèn)題解決
本文主要介紹了MySQL進(jìn)行g(shù)roup by字段返回大量異常結(jié)果的問(wèn)題解決,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Mysql關(guān)于進(jìn)程中的死鎖和解除鎖問(wèn)題
Mysql 經(jīng)常會(huì)遇到語(yǔ)句或者存儲(chǔ)過(guò)程長(zhǎng)時(shí)間沒(méi)有反應(yīng),大概率就是掛掉了,或者死鎖了,這篇文章主要介紹了Mysql關(guān)于進(jìn)程中的死鎖和解除鎖問(wèn)題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
Mysql聯(lián)表update數(shù)據(jù)的示例詳解
這篇文章主要介紹了Mysql聯(lián)表update數(shù)據(jù)的示例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
mysql導(dǎo)出表的字段和相關(guān)屬性的步驟方法
在本篇文章里小編給大家分享了關(guān)于mysql導(dǎo)出表的字段和相關(guān)屬性的步驟方法,有需要的朋友們跟著學(xué)習(xí)下。2019-01-01

