mysql json数据类型
Posted 提桶跑路先锋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql json数据类型相关的知识,希望对你有一定的参考价值。
一、mysql中json
类型的数据处理
MYSQL 5.7.8中引入了json字段类型
json字段的操作方法
初始化数据
-- 创建表 含有字段id、aley, 其中aley为json类型
mysql> show create table test;
+-------+----------------------------------+
| Table | Create Table
+-------+----------------------------------+
| test | CREATE TABLE `test` (
`aley` json DEFAULT NULL,
`id` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+-------+---------------------------------+
1 row in set (0.00 sec)
-- 插入数据
mysql> insert into test values (\'{"name":"aley","age":18}\', 1),(\'{"name":"szx","age":30}\',2),(\'{"name":"wwj","age":35}\', 3);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test;
+-----------------------------+----+
| aley | id |
+-----------------------------+----+
| {"age": 18, "name": "aley"} | 1 |
| {"age": 30, "name": "szx"} | 2 |
| {"age": 35, "name": "wwj"} | 3 |
+-----------------------------+----+
3 rows in set (0.00 sec)
json_valid()
json_valid
可以判断字段是否是json类型,如果是则返回1 不是返回0
mysql> select json_valid(aley) from test;
+------------------+
| json_valid(aley) |
+------------------+
| 1 |
| 1 |
| 1 |
+------------------+
3 rows in set (0.00 sec)
mysql> select json_valid(9);
+---------------+
| json_valid(9) |
+---------------+
| 0 |
+---------------+
1 row in set (0.00 sec)
json_extract()
使用json_extract
获取json内的数据,json_extract
需要两个参数, 第一个参数是字段名,第二个参数是需要取的json值,$表示根节点,$.age就是根节点下的age值,如果是多层json可以一直接着后面.key
mysql> select json_extract(aley, "$.age") as age from test;
+------+
| age |
+------+
| 18 |
| 30 |
| 35 |
+------+
3 rows in set (0.00 sec)
json_keys()
使用json_keys
可以查看最上层的所有key, 如果是多层的json只会返回传入的最上层的key
mysql> select json_keys(aley) from test;
+-----------------+
| json_keys(aley) |
+-----------------+
| ["age", "name"] |
| ["age", "name"] |
| ["age", "name"] |
+-----------------+
3 rows in set (0.01 sec)
mysql> select json_keys(\'{"a":{"b":1}}\');
+----------------------------+
| json_keys(\'{"a":{"b":1}}\') |
+----------------------------+
| ["a"] |
+----------------------------+
1 row in set (0.00 sec)
mysql> select json_keys(json_extract(\'{"a":{"b":1}}\', \'$.a\'));
+-------------------------------------------------+
| json_keys(json_extract(\'{"a":{"b":1}}\', \'$.a\')) |
+-------------------------------------------------+
| ["b"] |
+-------------------------------------------------+
1 row in set (0.02 sec)
json_type()
使用json_type
可以查看类型
mysql> select json_type(\'[1,2,3]\');
+----------------------+
| json_type(\'[1,2,3]\') |
+----------------------+
| ARRAY |
+----------------------+
1 row in set (0.00 sec)
mysql> select json_type(\'{"a":1}\');
+----------------------+
| json_type(\'{"a":1}\') |
+----------------------+
| OBJECT |
+----------------------+
1 row in set (0.00 sec)
mysql> select json_type(\'"a"\');
+------------------+
| json_type(\'"a"\') |
+------------------+
| STRING |
+------------------+
1 row in set (0.00 sec)
json_array()
使用json_array
可以获得一个json数组,传入一个空的或者多个值,返回这些值的json数组
mysql> select json_array("a", "b", now());
+------------------------------------------+
| json_array("a", "b", now()) |
+------------------------------------------+
| ["a", "b", "2021-06-08 10:36:50.000000"] |
+------------------------------------------+
1 row in set (0.00 sec)
json_extract
使用json_extract
可以获取json里面的值
mysql> select json_extract(aley, \'$.name\') from test;
+------------------------------+
| json_extract(aley, \'$.name\') |
+------------------------------+
| "aley" |
| "szx" |
| "wwj" |
+------------------------------+
3 rows in set (0.00 sec)
注: json_extract 第一个参数是json数据, 第二个参数是取json值的路径, $
为根节点。后面跟json的键(例:json为 {"a":1}, 要取a的值 $.a)
如果是多层嵌套的json可以接着点,如果是json的值是数组可以在键后面跟索引取对应的值
mysql> select json_extract(\'{"a": [1,2,3]}\', \'$.a\');
+---------------------------------------+
| json_extract(\'{"a": [1,2,3]}\', \'$.a\') |
+---------------------------------------+
| [1, 2, 3] |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> select json_extract(\'{"a": [1,2,3]}\', \'$.a[*]\');
+------------------------------------------+
| json_extract(\'{"a": [1,2,3]}\', \'$.a[*]\') |
+------------------------------------------+
| [1, 2, 3] |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> select json_extract(\'{"a": [1,2,3]}\', \'$.a[0]\');
+------------------------------------------+
| json_extract(\'{"a": [1,2,3]}\', \'$.a[0]\') |
+------------------------------------------+
| 1 |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> select json_extract(\'{"a": [1,2,3]}\', \'$.a[1]\');
+------------------------------------------+
| json_extract(\'{"a": [1,2,3]}\', \'$.a[1]\') |
+------------------------------------------+
| 2 |
+------------------------------------------+
1 row in set (0.00 sec)
以上是关于mysql json数据类型的主要内容,如果未能解决你的问题,请参考以下文章