1. JSON語法規則
- 數據在名稱/值對中
- 數據由逗號分隔
- 花括號保存對象
- 方括號保存數組
JSON 名稱/值對
JSON 數據的書寫格式是:{Key:Value}、{Key:Array}。
{Key:Value},前面是鍵,中間是英文的“:”(冒號),然后是值。但是注意的是如果是字符串,嚴格來說都是英文雙引號引起來的。
如:{"Key":"Value"}
{"name" : "鹿晗"} 等價於 name = "鹿晗"
JSON 值范圍
- 數字 (整數或浮點數)
- 字符串(在雙引號中)
- 邏輯值(
true或false) - 數組 (在方括號[]中)
- 對象 (在花括號{}中)
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 有的話就替換,沒有的就不操作。
