vlambda博客
学习文章列表

Mysql存储JSON字符串(数组)的操作

大家好,好久没有更新文章了,今天爬上来更新一篇最近在工作中遇到的问题和对应的解决方法。


最近有一个需求,让从Mysql数据库的表中查询出一项特定的字段,当时没太注意,一口答应下来,结果看了表中该字段的存储内容,我人傻了,里面存了个JSON数组(当时内心一万只草泥马奔腾而过),这库表设计的一言难尽...

                   

当初偷过的懒,迟早是要还回来的!咱也没办法,就想着去百度一下有没有什么好方法,这一搜,大大的惊喜,还真给我搜出来了,各位有需求的话也可以去百度一下,很多大神的博客把用法讲解的很清晰。


我又到Mysql官网的文档页面搜索了一下,网址是:https://dev.mysql.com/doc/refman/8.0/en/。大家感兴趣的话可以去看一下,接下来我也会给大家说一下我在文档中所看到的和学到的东西。


在搜索框中输入JSON,我们可以搜索出与JSON相关的内容

Mysql存储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函数相关的操作和功能介绍,大家感兴趣的话可以去看一下。


这就是今天分享的全部内容啦,欢迎大家给我留言。