MySQL中JSON数据类型的使用(3)——JSON类型有关的操作
一、JSON的路径语法
学生(student)表的表结构和数据如下:
mysql> desc student;
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(20) | YES | | NULL | |
| birth | datetime | YES | | NULL | |
| contact | json | YES | | NULL | |
+---------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> select * from student;
+----------+-----------+---------------------+------------------------------------------------------------------------+
| id | name | birth | contact |
+----------+-----------+---------------------+------------------------------------------------------------------------+
| 20190201 | ZhangTao | 1999-01-20 00:00:00 | {"QQ": "2589781425", "phone": "15937320588", "wechart": "15937320588"} |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | {"QQ": "2589781466", "phone": "13903730582", "wechart": "13903730582"} |
| 20190203 | LiuFei | 1999-11-02 00:00:00 | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
| 20190204 | ZhangTao | 2000-08-06 00:00:00 | {"QQ": "1889781467", "phone": "15037334666", "wechart": "pa2568988"} |
| 20190205 | ZhouPeng | 2000-06-19 00:00:00 | {"QQ": "6689781444", "phone": "15346382599", "wechart": "ww26779821"} |
+----------+-----------+---------------------+------------------------------------------------------------------------+
5 rows in set (0.01 sec)
学生(xs)表的表结构和数据如下:
mysql> desc xs;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(20) | YES | | NULL | |
| hobby | json | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> select * from xs;
+----------+------------+-----------------------------------------------------------+
| id | name | hobby |
+----------+------------+-----------------------------------------------------------+
| 20190101 | Zhang Peng | ["basketball", "football", "singsing"] |
| 20190102 | Liu Gang | ["dancing", "piano", "football"] |
| 20190103 | Zhang Feng | ["Chess", "calligraphy", "violin", "dancing", "football"] |
+----------+------------+-----------------------------------------------------------+
3 rows in set (0.01 sec)
1、$:表示当前正在使用的JSON文档
2、.keyName:JSON对象中键名为 keyName 的值
例如:
mysql> select id,name,birth,contact ->> '$.phone' phone from student;
+----------+-----------+---------------------+-------------+
| id | name | birth | phone |
+----------+-----------+---------------------+-------------+
| 20190201 | ZhangTao | 1999-01-20 00:00:00 | 15937320588 |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | 13903730582 |
| 20190203 | LiuFei | 1999-11-02 00:00:00 | 13072615888 |
| 20190204 | ZhangTao | 2000-08-06 00:00:00 | 15037334666 |
| 20190205 | ZhouPeng | 2000-06-19 00:00:00 | 15346382599 |
+----------+-----------+---------------------+-------------+
5 rows in set (0.00 sec)
说明:在 contact ->> ’
3、.*:表示 JSON 对象中的所有 value
例如:
mysql> select name,contact ->> '$.*' contact from student;
+-----------+----------------------------------------------+
| name | contact |
+-----------+----------------------------------------------+
| ZhangTao | ["2589781425", "15937320588", "15937320588"] |
| LiPengfei | ["2589781466", "13903730582", "13903730582"] |
| LiuFei | ["1789781433", "13072615888", "wa159373"] |
| ZhangTao | ["1889781467", "15037334666", "pa2568988"] |
| ZhouPeng | ["6689781444", "15346382599", "ww26779821"] |
+-----------+----------------------------------------------+
5 rows in set (0.00 sec)
4、[index]:JSON 数组中索引为 index 的值,JSON数组的索引从 0 开始
5、[*]:JSON 数组中的所有值
例如:
mysql> select id,name,hobby ->> '$[0]' from xs;
+----------+------------+------------------+
| id | name | hobby ->> '$[0]' |
+----------+------------+------------------+
| 20190101 | Zhang Peng | basketball |
| 20190102 | Liu Gang | dancing |
| 20190103 | Zhang Feng | Chess |
+----------+------------+------------------+
3 rows in set (0.00 sec)
mysql> select id,name,hobby ->> '$[*]' hobby from xs;
+----------+------------+-----------------------------------------------------------+
| id | name | hobby |
+----------+------------+-----------------------------------------------------------+
| 20190101 | Zhang Peng | ["basketball", "football", "singsing"] |
| 20190102 | Liu Gang | ["dancing", "piano", "football"] |
| 20190103 | Zhang Feng | ["Chess", "calligraphy", "violin", "dancing", "football"] |
+----------+------------+-----------------------------------------------------------+
3 rows in set (0.00 sec)
二、操作 JSON 类型数据的常用函数
1、创建 json 值的函数
(1)JSON_ARRAY:生成 json 数组
语法如下:
JSON_ARRAY(val1,val2,val3...)
举例:
mysql> insert into xs values('20190201','Wang Ping',json_array("dancing", "piano"));
Query OK, 1 row affected (0.02 sec)
mysql> select * from xs;
+----------+------------+-----------------------------------------------------------+
| id | name | hobby |
+----------+------------+-----------------------------------------------------------+
| 20190101 | Zhang Peng | ["basketball", "football", "singsing"] |
| 20190102 | Liu Gang | ["dancing", "piano", "football"] |
| 20190103 | Zhang Feng | ["Chess", "calligraphy", "violin", "dancing", "football"] |
| 20190201 | Wang Ping | ["dancing", "piano"] |
+----------+------------+-----------------------------------------------------------+
4 rows in set (0.00 sec)
(2)JSON_OBJECT:生成json对象
生成一个包含指定 Key-Value 对的 json object,参数个数必须为偶数。语法如下:
JSON_OBJECT(key1,val1,key2,val2...)
举例:
mysql> insert into student values('20200101','WangFei','1998-2-3',json_object("QQ","58794125","phone","15038971111","wechart","ya125879"));
Query OK, 1 row affected (0.01 sec)
mysql> select * from student where id='20200101';
+----------+---------+---------------------+-------------------------------------------------------------------+
| id | name | birth | contact |
+----------+---------+---------------------+-------------------------------------------------------------------+
| 20200101 | WangFei | 1998-02-03 00:00:00 | {"QQ": "58794125", "phone": "15038971111", "wechart": "ya125879"} |
+----------+---------+---------------------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
2、查询 json 值的函数
(1)JSON_CONTAINS:查询指定数据是否存在
查询 json 文档是否在指定 path 包含指定的数据,包含则返回1,否则返回0。如果参数为 NULL 或 path 不存在,则返回NULL。语法如下:
JSON_CONTAINS(json_doc, val[, path])
例如:
mysql> select name from student where json_contains(contact,'"15037334666"','$.phone');
+----------+
| name |
+----------+
| ZhangTao |
+----------+
1 row in set (0.00 sec)
(2)JSON_CONTAINS_PATH:查询指定路径是否存在
查询是否存在指定路径,存在则返回1,否则返回0。one_or_all 只能取值 “one” 或 “all”,one 表示只要有一个存在即可,all表示所有的都存在才行。语法如下:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
举例:
mysql> select id,name,json_contains_path(contact,'one','$.phone') from student;
+----------+-----------+---------------------------------------------+
| id | name | json_contains_path(contact,'one','$.phone') |
+----------+-----------+---------------------------------------------+
| 20190201 | ZhangTao | 1 |
| 20190202 | LiPengfei | 1 |
| 20190203 | LiuFei | 1 |
| 20190204 | ZhangTao | 1 |
| 20190205 | ZhouPeng | 1 |
| 20200101 | WangFei | 1 |
+----------+-----------+---------------------------------------------+
6 rows in set (0.00 sec)
(3)JSON_EXTRACT:查找指定的数据
从 json 文档中抽取数据。如果抽取出多个path,则返回的数据生成一个 json array。
JSON_EXTRACT(json_doc, path[, path] ...)
举例:
mysql> select id,name,json_extract(contact,'$.QQ') QQ from student;
+----------+-----------+--------------+
| id | name | QQ |
+----------+-----------+--------------+
| 20190201 | ZhangTao | "2589781425" |
| 20190202 | LiPengfei | "2589781466" |
| 20190203 | LiuFei | "1789781433" |
| 20190204 | ZhangTao | "1889781467" |
| 20190205 | ZhouPeng | "6689781444" |
| 20200101 | WangFei | "58794125" |
+----------+-----------+--------------+
6 rows in set (0.00 sec)
mysql> select id,name,json_extract(contact,'$.QQ','$.wechart') contact from student;
+----------+-----------+-------------------------------+
| id | name | contact |
+----------+-----------+-------------------------------+
| 20190201 | ZhangTao | ["2589781425", "15937320588"] |
| 20190202 | LiPengfei | ["2589781466", "13903730582"] |
| 20190203 | LiuFei | ["1789781433", "wa159373"] |
| 20190204 | ZhangTao | ["1889781467", "pa2568988"] |
| 20190205 | ZhouPeng | ["6689781444", "ww26779821"] |
| 20200101 | WangFei | ["58794125", "ya125879"] |
+----------+-----------+-------------------------------+
6 rows in set (0.00 sec)
说明:JSON_EXTRACT 可以使用 -> 代替,例如:
mysql> select id,name,contact -> '$.QQ' QQ from student;
+----------+-----------+--------------+
| id | name | QQ |
+----------+-----------+--------------+
| 20190201 | ZhangTao | "2589781425" |
| 20190202 | LiPengfei | "2589781466" |
| 20190203 | LiuFei | "1789781433" |
| 20190204 | ZhangTao | "1889781467" |
| 20190205 | ZhouPeng | "6689781444" |
| 20200101 | WangFei | "58794125" |
+----------+-----------+--------------+
6 rows in set (0.00 sec)
去掉查询结果中的双引号:
(A)可以使用 ->>,例如:
mysql> select id,name,contact ->> '$.QQ' QQ from student;
+----------+-----------+------------+
| id | name | QQ |
+----------+-----------+------------+
| 20190201 | ZhangTao | 2589781425 |
| 20190202 | LiPengfei | 2589781466 |
| 20190203 | LiuFei | 1789781433 |
| 20190204 | ZhangTao | 1889781467 |
| 20190205 | ZhouPeng | 6689781444 |
| 20200101 | WangFei | 58794125 |
+----------+-----------+------------+
6 rows in set (0.00 sec)
(B)使用 JSON_UNQUOTE 函数
mysql> select id,name,json_unquote(contact -> '$.QQ') QQ from student;
+----------+-----------+------------+
| id | name | QQ |
+----------+-----------+------------+
| 20190201 | ZhangTao | 2589781425 |
| 20190202 | LiPengfei | 2589781466 |
| 20190203 | LiuFei | 1789781433 |
| 20190204 | ZhangTao | 1889781467 |
| 20190205 | ZhouPeng | 6689781444 |
| 20200101 | WangFei | 58794125 |
+----------+-----------+------------+
6 rows in set (0.00 sec)
mysql> select id,name,json_unquote(json_extract(contact,'$.QQ')) QQ from student;
+----------+-----------+------------+
| id | name | QQ |
+----------+-----------+------------+
| 20190201 | ZhangTao | 2589781425 |
| 20190202 | LiPengfei | 2589781466 |
| 20190203 | LiuFei | 1789781433 |
| 20190204 | ZhangTao | 1889781467 |
| 20190205 | ZhouPeng | 6689781444 |
| 20200101 | WangFei | 58794125 |
+----------+-----------+------------+
6 rows in set (0.00 sec)
(4)JSON_KEYS
获取 json 文档在指定路径下的所有键值,返回一个 json array。语法如下:
JSON_KEYS(json_doc[, path])
举例:
mysql> select id,name,json_keys(contact) contact from student;
+----------+-----------+----------------------------+
| id | name | contact |
+----------+-----------+----------------------------+
| 20190201 | ZhangTao | ["QQ", "phone", "wechart"] |
| 20190202 | LiPengfei | ["QQ", "phone", "wechart"] |
| 20190203 | LiuFei | ["QQ", "phone", "wechart"] |
| 20190204 | ZhangTao | ["QQ", "phone", "wechart"] |
| 20190205 | ZhouPeng | ["QQ", "phone", "wechart"] |
| 20200101 | WangFei | ["QQ", "phone", "wechart"] |
+----------+-----------+----------------------------+
6 rows in set (0.00 sec)
3、修改 json 值的函数
(1)JSON_UNQUOTE:去掉 json 值的引号(")
语法如下:
JSON_UNQUOTE(val)
举例:
mysql> select id,name,json_unquote(json_extract(contact,'$.QQ')) QQ from student;
+----------+-----------+------------+
| id | name | QQ |
+----------+-----------+------------+
| 20190201 | ZhangTao | 2589781425 |
| 20190202 | LiPengfei | 2589781466 |
| 20190203 | LiuFei | 1789781433 |
| 20190204 | ZhangTao | 1889781467 |
| 20190205 | ZhouPeng | 6689781444 |
| 20200101 | WangFei | 58794125 |
+----------+-----------+------------+
6 rows in set (0.00 sec)
(2)JSON_INSERT:在指定位置插入值
在指定 path下插入数据,如果 path 已存在,则忽略此 val(不存在才插入)。语法如下:
JSON_INSERT(json_doc, path, val[, path, val] ...)
例如:
mysql> select name,contact from student where name='LiuFei';
+--------+---------------------------------------------------------------------+
| name | contact |
+--------+---------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select name,json_insert(contact,'$.addr','Henan Xinxiang') from student where name='LiuFei';
+--------+-------------------------------------------------------+
| name | json_insert(contact,'$.addr','Henan Xinxiang') |
+--------+---------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "addr": "Henan Xinxiang", "phone": "13072615888", "wechart": "wa159373"} |
+--------+----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select name,json_insert(contact,'$.phone','10086') from student where name='LiuFei';
+--------+---------------------------------------------------------------------+
| name | json_insert(contact,'$.phone','10086') |
+--------+---------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
(3)JSON_REMOVE:移除指定路径的值
移除指定路径的数据,如果某个路径不存在则略过此路径。语法如下:
JSON_REMOVE(json_doc, path[, path] ...)
举例:
mysql> select name,contact from student where name='LiuFei';
+--------+---------------------------------------------------------------------+
| name | contact |
+--------+---------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select name,json_remove(contact,'$.QQ') from student where name='LiuFei';
+--------+-------------------------------------------------+
| name | json_remove(contact,'$.QQ') |
+--------+-------------------------------------------------+
| LiuFei | {"phone": "13072615888", "wechart": "wa159373"} |
+--------+-------------------------------------------------+
1 row in set (0.00 sec)
(4)JSON_SET:设置指定路径的数据
语法如下:
JSON_SET(json_doc, path, val[, path, val] ...)
举例:
mysql> select name,contact from student where name='LiuFei';
+--------+---------------------------------------------------------------------+
| name | contact |
+--------+---------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select name,json_set(contact,'$.phone','10086') from student where name='LiuFei';
+--------+---------------------------------------------------------------+
| name | json_set(contact,'$.phone','10086') |
+--------+---------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "10086", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------+
1 row in set (0.00 sec)
-- 路径$.phone2不存在,则增加一个路径$.phone2
mysql> select name,json_set(contact,'$.phone2','10086') from student where name='LiuFei';
+--------+---------------------------------------------------------------------------+
| name | json_set(contact,'$.phone2','10086') |
+--------+---------------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "phone2": "10086", "wechart": "wa159373"} |
+--------+-----------------------------------------------------------------------+
1 row in set (0.00 sec)
(5)JSON_REPLACE:替换指定路径的数据
语法如下:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
说明:
JSON_REPLACE 和 JSON_SET 的区别:使用 JSON_SET 时,如果路径不存在,则创建一个路径;使用 JSON_REPLACE 时,如果路径不存在,则忽略。
例如:
mysql> select name,contact from student where name='LiuFei';
+--------+---------------------------------------------------------------------+
| name | contact |
+--------+---------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select name,json_replace(contact,'$.phone','10086') from student where name='LiuFei';
+--------+---------------------------------------------------------------+
| name | json_replace(contact,'$.phone','10086') |
+--------+---------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "10086", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select name,json_replace(contact,'$.phone2','10086') from student where name='LiuFei';
+--------+---------------------------------------------------------------------+
| name | json_replace(contact,'$.phone2','10086') |
+--------+---------------------------------------------------------------------+
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
+--------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
(6)JSON_ARRAY_INSERT:在指定位置插入数组元素
在 path 指定的 json array 元素插入数据,原位置及以右的元素顺次右移。如果指定的元素下标超过json array的长度,则插入尾部。
JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)
例如:
mysql> select id,name,hobby from xs where id='20190101';
+----------+------------+----------------------------------------+
| id | name | hobby |
+----------+------------+----------------------------------------+
| 20190101 | Zhang Peng | ["basketball", "football", "singsing"] |
+----------+------------+----------------------------------------+
1 row in set (0.00 sec)
mysql> select id,name,json_array_insert(hobby,'$[0]','piano') from xs where id='20190101';
+----------+------------+-------------------------------------------------+
| id | name | json_array_insert(hobby,'$[0]','piano') |
+----------+------------+-------------------------------------------------+
| 20190101 | Zhang Peng | ["piano", "basketball", "football", "singsing"] |
+----------+------------+-------------------------------------------------+
1 row in set (0.00 sec)
mysql> select id,name,json_array_insert(hobby,'$[10]','piano') from xs where id='20190101';
+----------+------------+-------------------------------------------------+
| id | name | json_array_insert(hobby,'$[10]','piano') |
+----------+------------+-------------------------------------------------+
| 20190101 | Zhang Peng | ["basketball", "football", "singsing", "piano"] |
+----------+------------+-------------------------------------------------+
1 row in set (0.00 sec)
(7)JSON_MERGE:合并
合并多个json文档。规则如下:如果都是 json array,则结果自动合并为一个 json array;如果都是json object,则结果自动合并为一个 json object;如果有多种类型,则将非 json array 的元素封装成 json array 再按照规则进行合并。语法如下:
JSON_MERGE(json_doc, json_doc[, json_doc] ...)
例如:
mysql> select json_merge(json_object("id",1,"name","Tom"),json_object("age",20));
+--------------------------------------------------------------------+
| json_merge(json_object("id",1,"name","Tom"),json_object("age",20)) |
+--------------------------------------------------------------------+
| {"id": 1, "age": 20, "name": "Tom"} |
+--------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> select json_merge(json_array("Zhangsan","Lisi"),json_array("Wangwu"));
+----------------------------------------------------------------+
| json_merge(json_array("Zhangsan","Lisi"),json_array("Wangwu")) |
+----------------------------------------------------------------+
| ["Zhangsan", "Lisi", "Wangwu"] |
+----------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> select json_merge(json_object("id",1,"name","Tom"),json_array(10,20));
+----------------------------------------------------------------+
| json_merge(json_object("id",1,"name","Tom"),json_array(10,20)) |
+----------------------------------------------------------------+
| [{"id": 1, "name": "Tom"}, 10, 20] |
+----------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
4、返回 json 值属性的函数
(1)JSON_DEPTH:深度
获取 json 文档的深度。语法如下:
JSON_DEPTH(json_doc)
举例:
mysql> select id,name,contact,json_depth(contact) from student where id='20190201';
+----------+----------+------------------------------------------------------------------------+---------------------+
| id | name | contact | json_depth(contact) |
+----------+----------+------------------------------------------------------------------------+---------------------+
| 20190201 | ZhangTao | {"QQ": "2589781425", "phone": "15937320588", "wechart": "15937320588"} | 2 |
+----------+----------+------------------------------------------------------------------------+---------------------+
1 row in set (0.00 sec)
(2)JSON_LENGTH:长度
获取指定路径下的长度。json array 的长度为元素的个数;json object的长度为key的个数。语法如下:
JSON_LENGTH(json_doc[, path])
例如:
mysql> select name,hobby,json_length(hobby) from xs;
+------------+-----------------------------------------------------------+--------------------+
| name | hobby | json_length(hobby) |
+------------+------------------------------------------------------+--------------------+
| Zhang Peng | ["basketball", "football", "singsing"] | 3 |
| Liu Gang | ["dancing", "piano", "football"] | 3 |
| Zhang Feng | ["Chess", "calligraphy", "violin", "dancing", "football"] | 5 |
| Wang Ping | ["dancing", "piano"] | 2 |
+------------+-----------------------------------------------------------+------------+
4 rows in set (0.00 sec)
mysql> select name,contact,json_length(contact) from student;
+-----------+------------------------------------------------------------------------+----------------------+
| name | contact | json_length(contact) |
+-----------+------------------------------------------------------------------------+----------------------+
| ZhangTao | {"QQ": "2589781425", "phone": "15937320588", "wechart": "15937320588"} | 3 |
| LiPengfei | {"QQ": "2589781466", "phone": "13903730582", "wechart": "13903730582"} | 3 |
| LiuFei | {"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} | 3 |
| ZhangTao | {"QQ": "1889781467", "phone": "15037334666", "wechart": "pa2568988"} | 3 |
| ZhouPeng | {"QQ": "6689781444", "phone": "15346382599", "wechart": "ww26779821"} | 3 |
| WangFei | {"QQ": "58794125", "phone": "15038971111", "wechart": "ya125879"} | 3 |
+-----------+------------------------------------------------------------------------+----------------------+
6 rows in set (0.00 sec)
(3)JSON_TYPE:类型
获取 json 文档的具体类型。语法如下:
JSON_TYPE(json_val)
举例:
mysql> select id,name,json_type(contact) from student;
+----------+-----------+--------------------+
| id | name | json_type(contact) |
+----------+-----------+--------------------+
| 20190201 | ZhangTao | OBJECT |
| 20190202 | LiPengfei | OBJECT |
| 20190203 | LiuFei | OBJECT |
| 20190204 | ZhangTao | OBJECT |
| 20190205 | ZhouPeng | OBJECT |
| 20200101 | WangFei | OBJECT |
+----------+-----------+--------------------+
6 rows in set (0.00 sec)
mysql> select id,name,json_type(hobby) from xs;
+----------+------------+------------------+
| id | name | json_type(hobby) |
+----------+------------+------------------+
| 20190101 | Zhang Peng | ARRAY |
| 20190102 | Liu Gang | ARRAY |
| 20190103 | Zhang Feng | ARRAY |
| 20190201 | Wang Ping | ARRAY |
+----------+------------+------------------+
4 rows in set (0.01 sec)
(4)JSON_VALID:是否是有效的 json 格式
判断val是否为有效的json格式,是为1,不是为0。语法如下:
JSON_VALID(val)
举例:
mysql> select json_valid('{"age":0}'); --有效的json格式
+-------------------------+
| json_valid('{"age":0}') |
+-------------------------+
| 1 |
+-------------------------+
1 row in set (0.00 sec)
mysql> select json_valid('[11,22]'); --有效的json格式
+-----------------------+
| json_valid('[11,22]') |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select json_valid('"abc":0'); --无效的json格式
+-----------------------+
| json_valid('"abc":0') |
+-----------------------+
| 0 |
+-----------------------+
1 row in set (0.00 sec)