Mysql存储JSON字符串(数组)的操作
大家好,好久没有更新文章了,今天爬上来更新一篇最近在工作中遇到的问题和对应的解决方法。
最近有一个需求,让从Mysql数据库的表中查询出一项特定的字段,当时没太注意,一口答应下来,结果看了表中该字段的存储内容,我人傻了,里面存了个JSON数组(当时内心一万只草泥马奔腾而过),这库表设计的一言难尽...
当初偷过的懒,迟早是要还回来的!咱也没办法,就想着去百度一下有没有什么好方法,这一搜,大大的惊喜,还真给我搜出来了,各位有需求的话也可以去百度一下,很多大神的博客把用法讲解的很清晰。
我又到Mysql官网的文档页面搜索了一下,网址是:https://dev.mysql.com/doc/refman/8.0/en/。大家感兴趣的话可以去看一下,接下来我也会给大家说一下我在文档中所看到的和学到的东西。
在搜索框中输入JSON,我们可以搜索出与JSON相关的内容
我们点开排在第一位的链接:
点开之后又出现了关于JSON Type的目录。主要包括:JSON值的创建;JSON串的规范化、合并和自动包装;JSON值的查找和修改;JSON路径语法;JSON值的比较和排序;JSON和非JSON值之间的转化;JSON值的聚合。
开始一大段是介绍Mysql对JSON类型的数据的支持和新版本对JSON数据操作的一些更新。接下来就开始以实际的例子来讲解对JSON数据的操作了。
首先,创建一张包含JSON数据类型的表t1,其中列jdoc字段的类型为JSON:
CREATE TABLE t1 (jdoc JSON);
然后插入一条数据:
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
当插入格式不正确的JSON数据时,会插入失败并显示错误信息:
mysql> INSERT INTO t1 VALUES('[1, 2,');
ERROR 3140 (22032) at line 2: Invalid JSON text:
"Invalid value." at position 6 in value (or column) '[1, 2,'.
我们要查找JSON字符串中的某个元素时,需要用到如下语句:
mysql> SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
+---------------------------------------------------------+
| JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
+---------------------------------------------------------+
| "Aztalan" |
+---------------------------------------------------------+
JSON_EXTRACT(col_name,'$.name')函数的第一个参数为列名,第二个参数为JSON串中的某个字段的key,通过$.key的形式来拼接,这样的话就可以查出结果来啦。如果是JSON数组的话,则可以通过$[0].key的形式来获取第一个元素的值,如果要获取数组中所有key对应的值的话,可以使用$[*].key来进行查询。
https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html页面中,有关于JSON函数相关的操作和功能介绍,大家感兴趣的话可以去看一下。
这就是今天分享的全部内容啦,欢迎大家给我留言。