MySQL8.0新特性_01_JSON數據格式的支持


1. JSON語法規則

  • 數據在名稱/值對中
  • 數據由逗號分隔
  • 花括號保存對象
  • 方括號保存數組

JSON 名稱/值對

JSON 數據的書寫格式是:{Key:Value}{Key:Array}

{Key:Value},前面是鍵,中間是英文的“:”(冒號),然后是值。但是注意的是如果是字符串,嚴格來說都是英文雙引號引起來的。

如:{"Key":"Value"}

{"name" : "鹿晗"}   等價於  name = "鹿晗"

JSON 值范圍

  • 數字 (整數或浮點數)
  • 字符串(在雙引號中)
  • 邏輯值(truefalse
  • 數組 (在方括號[]中)
  • 對象 (在花括號{}中)
  • null

JSON 對象

JSON 對象在花括號中,對象可以包含多個名稱/值對,如下代碼所示:

{
    "name": "鹿晗",
    "age": 26,
    "birthday": "1990年4月20日",
}

這一點也容易理解,與這條 JavaScript 語句等價:

name = "鹿晗";
age = 26;
birthday = "1990年4月20日";

JSON 數組

JSON數組在方括號("[]")中書寫,數組可包含多個對象,如下“star_male”描述

{
    "star_male": [
        {
            "name": "鹿晗",
            "age": "26"
        },
        {
            "nickname": "李易峰",
            "age": "29"
        },
        {
            "nickname": "陳赫",
            "lastName": "31"
        }
    ]
}

在上面的例子中,對象 "star_male" 是包含三個對象的數組。每個對象代表一條關於一個明星(姓名和年齡)的記錄。

2.JSON基礎函數應用:增、刪、改、查

創建json的表

use test;
CREATE TABLE t_json(id INT PRIMARY KEY, sname VARCHAR(20) , info  JSON);
desc t_json;

插入記錄

-- 插入含有json數組的記錄  數組格式
INSERT INTO t_json(id,sname,info) VALUES( 1, 'name1', JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()));    # CURTIME() 時間函數 20:24:23.000000

-- 插入含有json對象的記錄  使用最多的。
INSERT INTO t_json(id,sname,info) VALUES( 2, 'name2', JSON_OBJECT("age", 20, "time", now()));    # now()時間函數的值 2020-11-22 20:26:06.000000
INSERT INTO t_json(id,sname,info) VALUES( 3, 'name3', '{"age":20, "time":"2020-11-22 20:34:00"}');  #對象類型使用居多

查詢記錄

-- 查詢全部的數據
mysql> select * from t_json;
+----+-------+---------------------------------------------------+
| id | sname | info                                              |
+----+-------+---------------------------------------------------+
|  1 | name1 | [1, "abc", null, true, "20:24:23.000000"]         |
|  2 | name2 | {"age": 20, "time": "2020-11-22 20:26:06.000000"} |
|  3 | name3 | {"age": 20, "time": "2020-11-22 20:34:00"}        |
+----+-------+---------------------------------------------------+
3 rows in set (0.01 sec)

-- 查詢記錄
SELECT sname,JSON_EXTRACT(info,'$.age') FROM t_json;   # 使用函數居多

SELECT sname,info->'$.age' FROM t_json;
-- 查詢key
SELECT id,json_keys(info) FROM t_json;

修改記錄

-- 增加鍵
UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.1') WHERE id = 2;
-- 變更值
UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.2') WHERE id = 2;   
-- 刪除鍵
UPDATE t_json SET info = json_remove(info,'$.ip') WHERE id = 2;

# 說明:
正常的mysql的語句 UPDATE t_json SET info = 
json_set     說明的是  當info字段中沒有ip這列的時候,增加一列值 ,如果有列和值的話,修改這列的值。 條件為2的行數
json_remove  說明的是  刪除ip這列和值。 條件為2的行數

和set 相關的還有一個 json_replace 有的話就替換,沒有的就不操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM