MySQL是一個關系型數據庫管理系統,但也支持JSON格式的數據存儲和處理。而在處理JSON格式的數據時,解析JSON串成為列數據是一個常見的需求。本文將介紹如何使用MySQL的函數和語法來解析JSON串成為列數據。
1. 使用JSON_EXTRACT函數解析JSON串為列數據
JSON_EXTRACT是MySQL提供的函數,可以將JSON格式的數據轉換成相應的列數據。 它接受兩個參數,第一個參數是原始JSON串,第二個參數是需要提取的鍵名。 例如:我們有以下JSON串
{ "name": "Tom", "age": 30, "hobby": ["reading", "traveling", "cooking"] }
可以使用JSON_EXTRACT函數提取hobby鍵所對應的數據,如下所示
SELECT JSON_EXTRACT('{ "name": "Tom", "age": 30, "hobby": ["reading", "traveling", "cooking"] }', '$.hobby');
執行結果:
["reading", "traveling", "cooking"]
我們可以看到,JSON_EXTRACT函數成功將JSON串中的數據提取出來,并返回一個數組。當然,我們也可以將數組的內容拆分成不同行
SELECT JSON_EXTRACT('{ "name": "Tom", "age": 30, "hobby": ["reading", "traveling", "cooking"] }', '$.hobby[0]') AS hobby1, JSON_EXTRACT('{ "name": "Tom", "age": 30, "hobby": ["reading", "traveling", "cooking"] }', '$.hobby[1]') AS hobby2, JSON_EXTRACT('{ "name": "Tom", "age": 30, "hobby": ["reading", "traveling", "cooking"] }', '$.hobby[2]') AS hobby3;
執行結果:
hobby1 | hobby2 | hobby3 ------------------------ reading|traveling| cooking
2. 使用JSON_TABLE函數解析JSON串為列數據
JSON_TABLE是MySQL 8.0版本開始支持的函數,它可以將JSON格式的數據解析成表格形式的數據。 它接受三個參數,第一個參數是原始JSON串,第二個參數是JSON路徑,第三個參數是列定義。 例如:我們有以下JSON串
{ "code": 200, "message": "success", "data": [ { "name": "Tom", "age": 30, "hobby": ["reading", "traveling", "cooking"] }, { "name": "Jerry", "age": 25, "hobby": ["swimming", "drawing", "playing guitar"] } ] }
可以使用JSON_TABLE函數將data數組中的每個元素轉換為單獨的行,例如:
SELECT name, age, hobby FROM JSON_TABLE('{ "code": 200, "message": "success", "data": [ { "name": "Tom", "age": 30, "hobby": ["reading", "traveling", "cooking"] }, { "name": "Jerry", "age": 25, "hobby": ["swimming", "drawing", "playing guitar"] } ] }', '$.data[*]' COLUMNS ( name VARCHAR(50) PATH '$.name', age INT PATH '$.age', hobby VARCHAR(100) PATH '$.hobby' )) AS t;
執行結果:
name | age | hobby ------------------- Tom | 30 | ["reading", "traveling", "cooking"] Jerry | 25 | ["swimming", "drawing", "playing guitar"]
我們可以看到,JSON_TABLE函數成功將JSON串解析成為了表格形式的數據,并返回了包含每個元素的name,age和hobby的信息。