最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中的json處理相關方法詳解

 更新時間:2025年10月21日 09:31:30   投稿:mrr  
在MySQL中,這些JSON函數(shù)用于處理JSON類型的數(shù)據(jù),方便對JSON數(shù)據(jù)進行提取、轉(zhuǎn)換和聚合等操作,本文給大家介紹MySQL的json處理相關方法,感興趣的朋友跟隨小編一起看看吧

起因:在使用tidb作為檢查點的存儲模塊時,想著tidb兼容mysql,于是借用的langgraph-checkpoint-mysql插件來實現(xiàn)tidb。但在驗證過程中發(fā)現(xiàn)并不如此,mysql很多處理json的語法tidb無法使用。下面介紹這些語法的功能,下一篇會介紹到底哪里不兼容。
json_table,json_unquote,json_extract,json_keys,json_arrayagg,json_array

在 MySQL 中,這些 JSON 函數(shù)用于處理 JSON 類型的數(shù)據(jù),方便對 JSON 數(shù)據(jù)進行提取、轉(zhuǎn)換和聚合等操作。

JSON_TABLE

作用:將 JSON 數(shù)據(jù)轉(zhuǎn)換為關系表的形式,使得可以像查詢普通表一樣查詢 JSON 數(shù)據(jù)中的元素,方便進行復雜的查詢和分析。

案例:假設有一個 students 表,其中 courses 字段是 JSON 類型,存儲了學生所選課程及其成績。

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    courses JSON
);
INSERT INTO students (id, name, courses) VALUES
(1, 'Alice', '[{"course": "Math", "score": 90}, {"course": "English", "score": 85}]'),
(2, 'Bob', '[{"course": "Math", "score": 80}, {"course": "English", "score": 88}]');
-- 使用 JSON_TABLE 展開 courses 字段
SELECT 
    s.id,
    s.name,
    jt.course,
    jt.score
FROM 
    students s,
    JSON_TABLE(
        s.courses,
        '$[*]' COLUMNS (
            course VARCHAR(50) PATH '$.course',
            score INT PATH '$.score'
        )
    ) AS jt;

查詢結(jié)果:

idnamecoursescore
1AliceMath90
1AliceEnglish85
2BobMath80
2BobEnglish88
JSON_TABLE(
  json_data,  -- 輸入的 JSON 數(shù)據(jù)(可以是字段名、JSON 字符串或表達式)
  row_path_expression  -- 行路徑表達式,指定從 JSON 中提取“行”的范圍
  COLUMNS (
    -- 定義輸出表的列結(jié)構,每個列包含:列名、數(shù)據(jù)類型、JSON 路徑
    column1 data_type PATH 'json_path1',
    column2 data_type PATH 'json_path2',
    ...
  )
) AS table_alias  -- 為轉(zhuǎn)換后的表指定別名

row_path_expression:行路徑表達式

  • 用 JSON 路徑語法指定從 JSON 中哪些部分提取 “行”(每個匹配的元素會成為表中的一行)。
  • 常用語法:
    • $[*]:匹配 JSON 數(shù)組中的所有元素(每個元素作為一行)。
    • $.obj[*]:匹配 JSON 對象中 obj 字段對應的數(shù)組的所有元素。
  • 示例:'$[*]'(解析 JSON 數(shù)組的所有元素為行)。

COLUMNS (...):定義輸出表的列結(jié)構

用于指定轉(zhuǎn)換后的關系表包含哪些列,以及每個列的值從 JSON 中的哪個位置提取。每個列的定義格式為:列名 數(shù)據(jù)類型 PATH 'JSON路徑'

JSON_UNQUOTE 和JSON_EXTRACT

JSON_UNQUOTE

作用:移除 JSON 字符串中的引號,將 JSON 格式的字符串轉(zhuǎn)換為普通字符串。

案例:假設從 JSON 數(shù)據(jù)中提取出來的某個值是帶引號的字符串,想要得到不帶引號的內(nèi)容時使用。

JSON_EXTRACT

作用:從 JSON 數(shù)據(jù)中提取指定路徑的元素,可以是標量值(如字符串、數(shù)字等),也可以是 JSON 對象或數(shù)組。

案例:繼續(xù)使用上述 students 表,查詢學生 Alice 的數(shù)學成績。

查詢結(jié)果:

name
John
  1. SET @json_str = '{"name": "John"}';
  • 定義一個名為 @json_str 的用戶變量,并賦值為 JSON 格式的字符串 {"name": "John"}
  • 這里的 JSON 字符串表示一個對象,包含一個鍵值對:"name" 對應的值是 "John"(注意 JSON 中字符串必須用雙引號包裹)。
  1. SELECT JSON_UNQUOTE(JSON_EXTRACT(@json_str, '$.name')) AS name;

這是一個查詢語句,包含兩個嵌套的 JSON 函數(shù):

(1)JSON_EXTRACT(@json_str, '$.name')

  • 作用:從 JSON 數(shù)據(jù)中提取指定路徑的值。
  • @json_str 是要解析的 JSON 變量(即 {"name": "John"})。
  • '$.name' 是 JSON 路徑,表示 “根節(jié)點下的 name 字段”($ 代表根節(jié)點)。
  • 執(zhí)行結(jié)果:提取到的值是 "John"(帶雙引號的 JSON 字符串)。

(2)JSON_UNQUOTE(...)

  • 作用:移除 JSON 字符串外層的雙引號,將其轉(zhuǎn)換為普通字符串。
  • 接收 JSON_EXTRACT 的結(jié)果 "John" 作為參數(shù),移除引號后得到 John。

(3)AS name

  • 給查詢結(jié)果的列起一個別名 name,方便閱讀。

JSON_KEYS

作用:返回 JSON 對象中的所有鍵,以 JSON 數(shù)組的形式呈現(xiàn)。

案例:假設有一個存儲用戶信息的 JSON 數(shù)據(jù),獲取其中所有的鍵。

SET @user_info = '{"name": "Tom", "age": 25, "email": "tom@example.com"}';
SELECT JSON_KEYS(@user_info) AS keys;

查詢結(jié)果:

keys
[“name”, “age”, “email”]

JSON_ARRAYAGG

作用:將一組值聚合為一個 JSON 數(shù)組,常用于分組查詢中,將每組內(nèi)的相關數(shù)據(jù)聚合成 JSON 數(shù)組形式。

案例:統(tǒng)計每個學生所選課程的名稱,以 JSON 數(shù)組形式呈現(xiàn)。

SELECT 
    name,
    JSON_ARRAYAGG(course) AS courses
FROM 
    students s,
    JSON_TABLE(
        s.courses,
        '$[*]' COLUMNS (
            course VARCHAR(50) PATH '$.course'
        )
    ) AS jt
GROUP BY 
    name;

查詢結(jié)果:

namecourses
Alice[“Math”, “English”]
Bob[“Math”, “English”]

JSON_ARRAY

作用:將一組值創(chuàng)建為一個 JSON 數(shù)組,它與 JSON_ARRAYAGG 的區(qū)別在于,JSON_ARRAY 不是聚合函數(shù),是直接創(chuàng)建數(shù)組。

案例:創(chuàng)建一個包含多個字符串的 JSON 數(shù)組。

SELECT JSON_ARRAY('red', 'green', 'blue') AS colors;

查詢結(jié)果:

colors
[“red”, “green”, “blue”]

到此這篇關于MySQL中的json處理相關方法詳解的文章就介紹到這了,更多相關mysql json處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql截取的字符串函數(shù)substring_index的用法

    mysql截取的字符串函數(shù)substring_index的用法

    這篇文章主要介紹了mysql截取的字符串函數(shù)substring_index的用法,需要的朋友可以參考下
    2014-08-08
  • Mysql自增主鍵id不是以此逐級遞增的處理

    Mysql自增主鍵id不是以此逐級遞增的處理

    這篇文章主要介紹了Mysql自增主鍵id不是以此逐級遞增的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MySQL主鍵與外鍵設計原則 + 實戰(zhàn)案例解析

    MySQL主鍵與外鍵設計原則 + 實戰(zhàn)案例解析

    這篇文章詳細介紹了MySQL中的主鍵和外鍵,包括它們的基本概念、設計原則、應用場景以及實戰(zhàn)案例,主鍵用于唯一標識表中的每一行記錄,而外鍵用于建立和加強表之間的關聯(lián)關系,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • navicat創(chuàng)建MySql定時任務的方法詳解

    navicat創(chuàng)建MySql定時任務的方法詳解

    這篇文章主要介紹了navicat創(chuàng)建MySql定時任務的方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • MySQL數(shù)據(jù)庫如何正確設置主鍵

    MySQL數(shù)據(jù)庫如何正確設置主鍵

    主鍵是用于唯一標識數(shù)據(jù)庫表中每一行數(shù)據(jù)的一列或一組列,主鍵可以確保數(shù)據(jù)的唯一性和完整性,這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫如何正確設置主鍵的相關資料,需要的朋友可以參考下
    2024-04-04
  • 關于mysql innodb count(*)速度慢的解決辦法

    關于mysql innodb count(*)速度慢的解決辦法

    innodb引擎在統(tǒng)計方面和myisam是不同的,Myisam內(nèi)置了一個計數(shù)器,所以在使用 select count(*) from table 的時候,直接可以從計數(shù)器中取出數(shù)據(jù)。而innodb必須全表掃描一次方能得到總的數(shù)量
    2012-12-12
  • MySQL8.0安裝中遇到的3個小錯誤總結(jié)

    MySQL8.0安裝中遇到的3個小錯誤總結(jié)

    這篇文章主要給大家總結(jié)介紹了關于MySQL8.0安裝中遇到的3個小錯誤的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,對大家學習或者使用mysql8.0具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • Mysql主從同步如何重置

    Mysql主從同步如何重置

    在MySQL數(shù)據(jù)庫運維中,遇到主從數(shù)據(jù)庫數(shù)據(jù)不一致時需要進行同步重置,本文介紹了主從同步重置的具體步驟:首先對從庫操作,包括停止slave、重置從庫;其次對主庫進行操作,包括重置主庫同步設置、鎖定主庫;最后從庫導入主庫數(shù)據(jù)
    2024-10-10
  • MySQL觸發(fā)器使用詳解

    MySQL觸發(fā)器使用詳解

    本文主要詳細介紹了mysql數(shù)據(jù)庫的觸發(fā)器的相關知識,非常的全面,有需要的小伙伴參考下吧。
    2015-01-01
  • Mysql查詢優(yōu)化的一些實用方法總結(jié)

    Mysql查詢優(yōu)化的一些實用方法總結(jié)

    對于MySQL查詢語句來說,效率是最重要的,下面這篇文章主要給大家介紹了關于Mysql查詢優(yōu)化的一些實用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論

抚远县| 六盘水市| 邓州市| 合阳县| 云浮市| 运城市| 阳高县| 肃北| 达拉特旗| 朝阳市| 关岭| 五莲县| 晴隆县| 夏津县| 化州市| 镇江市| 安多县| 西峡县| 晋中市| 兴宁市| 河北区| 武平县| 汉中市| 辉南县| 龙州县| 辽宁省| 乐山市| 平舆县| 康马县| 塔河县| 岳池县| 紫阳县| 阜新市| 高安市| 中宁县| 宜城市| 锡林郭勒盟| 驻马店市| 瑞丽市| 青冈县| 鄄城县|