mysql5.7-Version beginnt mit der Unterstützung von Feldern vom Typ JSON
json_extract kann Die vollständige Abkürzung ist->
json_unquote(json_extract()) kann vollständig abgekürzt werden als->>
Die meisten davon In der folgenden Einführung wird die Abkürzung
CREATE TABLE `test_json` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` json DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
# 插入两条测试用的记录 INSERT INTO `test_json` (`content`) VALUES ('{\"name\":\"tom\",\"age\":18,\"score\":[100,90,87],\"address\":{\"province\":\"湖南\",\"city\":\"长沙\"}}'); INSERT INTO `test_json` (`content`) VALUES ('[1, "apple", "red", {"age": 18, "name": "tom"}]');
id# # | Inhalt|
---|---|
{"age": 18, "name": „tom“, „score“: [100, 90, 87], „address“: {“city“: „Changsha“, „province“: „Hunan“}} | |
[1, „apple“, „red“, {“age“: 18, „name“: „tom“}] | # ## # |
# 得到"tom" select json_extract(content,'$.name') from test_json where id = 1; # 简写方式:字段名->表达式等价于json_extract(字段名,表达式) select content->'$.name' from test_json where id = 1; # 结果: +--------------------------------+ | json_extract(content,'$.name') | +--------------------------------+ | "tom" | +--------------------------------+ +-------------------+ | content->'$.name' | +-------------------+ | "tom" | +-------------------+ # 解除双引号,得到tom select json_unquote(json_extract(content,'$.name')) from test_json where id = 1; # 简写方式:字段名->>表达式等价于json_unquote(json_extract(字段名,表达式)) select content->>'$.name' from test_json where id = 1; # 结果: +----------------------------------------------+ | json_unquote(json_extract(content,'$.name')) | +----------------------------------------------+ | tom | +----------------------------------------------+ +--------------------+ | content->>'$.name' | +--------------------+ | tom | +--------------------+
# #
In der json_extract-Funktion der erste Parameter Inhalt stellt JSON-Daten dar, der zweite Parameter ist der JSON-Pfad, wobei $ die JSON-Daten selbst darstellt, $[i] das Abrufen des Elements mit Index i im JSON-Array darstellt (Index beginnt bei 0)
# 得到"apple" select json_extract(content,'$[1]') from test_json where id = 2; # 简写,效果同上 select content->'$[1]' from test_json where id = 2; # 结果: +------------------------------+ | json_extract(content,'$[1]') | +------------------------------+ | "apple" | +------------------------------+ +-----------------+ | content->'$[1]' | +-----------------+ | "apple" | +-----------------+ # 解除双引号,得到apple select json_unquote(json_extract(content,'$[1]')) from test_json where id = 2; # 简写,效果同上 select content->>'$[1]' from test_json where id = 2; # 结果: +--------------------------------------------+ | json_unquote(json_extract(content,'$[1]')) | +--------------------------------------------+ | apple | +--------------------------------------------+ +------------------+ | content->>'$[1]' | +------------------+ | apple | +------------------+
content: id=1
{"age": 18, "name": "tom", "score": [100, 90, 87], "address": {"city": "Changsha", "province": "Hunan"}}- Erhalten Sie Daten von mehreren JSON paths# ## 得到:87 select content->'$.score[2]' from test_json where id = 1; # 结果: +-----------------------+ | content->'$.score[2]' | +-----------------------+ | 87 | +-----------------------+ # 得到:18 select content->'$[3].age' from test_json where id = 2; # 结果: +---------------------+ | content->'$[3].age' | +---------------------+ | 18 | +---------------------+Nach dem Login kopieren
4. Besser werden
{"age": 18, „name“: „tom“, „score“: [100, 90, 87], „address“: {“city“: „Changsha“, „province“: „Hunan“}}
# #- Die Verwendung des Pfadausdrucks*select json_extract(content,'$.age','$.score') from test_json where id = 1; # 结果: +-----------------------------------------+ | json_extract(content,'$.age','$.score') | +-----------------------------------------+ | [18, [100, 90, 87]] | +-----------------------------------------+ select json_extract(content,'$.name','$.address.province','$.address.city') from test_json where id = 1; # 结果: +----------------------------------------------------------------------+ | json_extract(content,'$.name','$.address.province','$.address.city') | +----------------------------------------------------------------------+ | ["tom", "湖南", "长沙"] | +----------------------------------------------------------------------+Nach dem Login kopieren
kombiniert die Daten mehrerer Pfade in einem Array und gibt es zurück# 先插入一条用于测试的数据 INSERT INTO `test_json` (`id`,`content`) VALUES(3,'{"name":"tom","address":{"name":"中央公园","city":"长沙"},"class":{"id":3,"name":"一年三班"},"friend":[{"age":20,"name":"marry"},{"age":21,"name":"Bob"}]}')Nach dem Login kopieren
# 获取所有二级嵌套中key=name的值 # 由于friend的二级嵌套是一个数组,所以.name获取不到其中的所有name值 select content->'$.*.name' from test_json where id = 3; +----------------------------------+ | content->'$.*.name' | +----------------------------------+ | ["一年三班", "中央公园"] | +----------------------------------+``` # 获取所有key为name值的数据,包括任何嵌套内的name select content->'$**.name' from test_json where id = 3; +---------------------------------------------------------+ | content->'$**.name' | +---------------------------------------------------------+ | ["tom", "一年三班", "marry", "Bob", "中央公园"] | +---------------------------------------------------------+ # 获取数组中所有的name值 select content->'$.friend[*].name' from test_json where id = 3; +-----------------------------+ | content->'$.friend[*].name' | +-----------------------------+ | ["marry", "Bob"] | +-----------------------------+
content: id=1
{"age": 18, "name": "tom" , "score" : [100, 90, 87], "address": {"city": "Changsha", "province": "Hunan"}}Der Pfad enthält NULL
Der JSON-Pfad Sie suchen, existiert nicht# age路径不存在,返回NULL # 若有多个路径,只要有一个路径存在则不会返回NULL select json_extract(content,'$.price') from test_json where id = 1; +---------------------------------+ | json_extract(content,'$.price') | +---------------------------------+ | NULL | +---------------------------------+Nach dem Login kopieren
# 存在任意路径为NULL则返回NULL select json_extract(content,'$.age',NULL) from test_json where id = 1; +------------------------------------+ | json_extract(content,'$.age',NULL) | +------------------------------------+ | NULL | +------------------------------------+
select json_extract('{1,2]',$[0])
Wenn der Pfadausdruck nicht standardisiert ist, wird ein Fehler zurückgegebenselect content->'$age' from test_json where id = 1; # 结果: ERROR 3143 (42000): Invalid JSON path expression. The error is around character position 1.Nach dem Login kopieren
5. Verwendungsszenarien Die JSON_EXTRACT-Funktion wird normalerweise verwendet, um einen bestimmten Wert in JSON zu erhalten. Verwenden Sie, wenn Sie Daten verwenden oder sie als Beurteilungsbedingung verwenden möchten.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie json_extract in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!