• 15
  • 15
分享
  • 你知道吗?MySQL可以直接操作JSON!——软件测试圈
  • 曼倩诙谐 2021-11-17 10:45:35 字数 3330 阅读 824 收藏 15

  MySQL 支持原生 JSON 数据类型,可以有效访问 JSON(JavaScript Object Notation)中的数据。与将JSON 格式的字符串存储在字符串列中相比,JSON 数据类型具有以下优势:

  1.存储在 JSON 列中的 JSON 文档被转换为允许对文档元素进行快速读取访问的内部格式。

  2.Mysql提供自动验证存储在 JSON 列中的 JSON数据。

  下面我们将通过创建具体的实例实现Json数据的操作。

  首先我们创建表结构:

mysql> CREATE TABLE `student` (
    ->   `student_id` int(20) NOT NULL,
    ->   `name` varchar(255) DEFAULT NULL,
    ->   `age` int(10) DEFAULT NULL,
    ->   `json_value` json DEFAULT NULL,
    ->   PRIMARY KEY (`student_id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  插入测试数据:

insert into student VALUES(1,'张三',20,'{"className": "一年级", "classId": "1", "classLeaderId": "100"}');
insert into student VALUES(2,'李四',20,'{"className": "一年级", "classId": "1", "classLeaderId": "100"}');
insert into student VALUES(3,'王五',20,'{"className": "二年级", "classId": "2", "classLeaderId": "101"}');

  查询结果:

图片 1.png


  上述入库操作时,我们是将拼接好的json字符串直接当作value值插入,很多读者可能会问“创建一个长度稍大点的字符串也可以实现?”。当然Mysql给我们的功能远远不止这些,下面我们将整理关于操作json的一些sql操作,以备大家学习参考。

图片 26.png


函数

  如何创建json

  1.JSON_ARRAY(val1,val2,val3...)

  该方法可以接受0个或者多个值的列表并返回一个包含这些值的 JSON 数组,结合设计我们可以利用该函数实现将List数组存储到数据库中。

图片 4.png


  2.JSON_OBJECT(key1,val1,key2,val2...)

  该方法接受0个或者多个键值对列表并返回一个包含这些对的 JSON 对象,利用该方法我们可以很容易的创建一个json对象。

图片 5.png


  3.JSON_QUOTE(json_val)

  通常用于生成有效的 JSON 字符串文字以包含在 JSON 文档中。

图片 6.png


  查询json

  1.JSON_CONTAINS(json_doc, val[, path])

  该方法可以查询JSON格式数据中是否包含特定对象,包含返回1,否则返回0。比如我们要查询年级为一年级的学生信息:

图片 7.png


  2.JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

  该方法查询是json类型是否存在指定的key,存在则返回1,否则返回0。如果有参数为NULL,则返回NULL。one_or_all只能取值"one"或"all",one表示只要有一个存在即可;all表示所有的都存在才行。例如查询json中是否包含className和classLeaderId。

图片 8.png


  3.JSON_EXTRACT(json_doc, path[, path] ...)

  从json里抽取指定数据。如果有参数有NULL或接送不存在,则返回NULL。例如查询存在json中的年级名称。

图片 9.png


  4.column->path

  JSON_EXTRACT的缩写方式,通过’$.’指定json中的值。例如查询json中的年级名称。

图片 10.png


  5.json_keys

  获取json文档在指定路径下的所有键值,返回一个json array。如果有参数为NULL或path不存在,则返回NULL。比如查询student中json_value的全部keys。

图片 11.png

  6.JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])

  用于在json格式中查询并返回符合条件的节点。如果有参数为NUL或path不存在,则返回NULL。one_or_all:"one"表示查询到一个即返回;"all"表示查询所有。search_str:要查询的字符串。 可以用LIKE里的'%'或‘_’匹配。path:在指定名称。比如查询值为“一年级”在json中的位置。

图片 12.png

  修改json

  1.JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

  在指定数组尾部追加取值,用于json数组。如果指定path是一个json对象时,则将其封装成一个json数组再追加。如果有参数为NULL,则返回NULL。比如在json数组'["1", ["2", "2.1"], "3"]'后添加2.2。

图片 13.png

  2.JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)

  在指定的json数组元素插入值,原位置及以右的元素顺次右移。如果指定的元素下标超过json数组的长度,则插入尾部。比如在json数组'["1", ["2", "2.1"], "3"]'后插入2.05到2与2.1之间。

图片 14.png

  3.JSON_INSERT(json_doc, path, val[, path, val] ...)

  在指定路径下插入数据,如果路径已存在,则忽略此值(不存在才插入)。比如在student表中添加location:北京。

图片 15.png

  4.JSON_REPLACE(json_doc, path, val[, path, val] ...)

  替换指定路径的数据,如果某个路径不存在则略过(存在才替换)。如果有参数为NULL,则返回NULL。例如替换student表json_value中的年级。

图片 17.png

  5.JSON_SET(json_doc, path, val[, path, val] ...)

  设置指定路径的数据(不管是否存在)。如果有参数为NULL,则返回NULL。比如将className设置成“五年级”再补充country为“中国”。

图片 18.png

  6.JSON_MERGE(json_doc, json_doc[, json_doc] ...)

  将多个json类型的数据合并,如果都是json数组,则结果自动合并为一个json数组;

  如果都是json对象,则结果自动合并为一个json对象;如果有多种类型,则统一转换成json数组再进行合并。例如将[1,2]数组与对象{"name": "张三"}进行合并。

图片 19.png

  7.JSON_REMOVE(json_doc, path[, path] ...)

  移除指定路径的数据,如果某个路径不存在则略过此路径。如果有参数为NULL,则返回NULL。例如删除student表中的classLeaderId。

图片 20.png

  json属性

  1.json_depth

  获取json的深度。如果参数为NULL,则返回NULL。

图片 21.png

  2.json_length

  获取指定路径下的长度。如果参数为NULL,则返回NULL。

图片 23.png

  3.json_type

  获取json的具体类型。如果参数为NULL,则返回NULL。

图片 24.png

  4.json_valid

  判断输入值是否为有效的json格式,是为1,不是为0。如果参数为NUL,则返回NULL。

图片 25.png



作者:梁兵兵   

来源:http://www.51testing.com/html/13/n-4479913.html


2021 问卷礼物图.png2021 问卷礼物图.png

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •        总有一些题,超越了岁月,即便是经过了新框架的层层迭代,它依然散发着令人回味无穷的味道。下面的几个笔试题目,是JAVA面试中经常遇见的,大家一定要牢记于心,可别复习到了到时候又说不出来。我就吃过这种亏,不说啦,下面来看题目。二维数组中的查找       面试题       在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。p...
            13 13 2392
            分享
          •   今天,我们来聊聊如何成为一枚初级测试工程师?  最近经常收到小伙伴的私信问打算进入到互联网这个行业,如何转行软件测试?学测试难吗?以及谈到自己非计算机科班毕业,半路转行没什么经验,比较迷茫,不知道学习路线,以及需要学习哪些课程。甚至询问是否需要报个培训班学习,自学就可以吗,还是必须报班等问题。  首先我想说,初级软件测试学习和入门的门槛都是很低的,比起开发岗位来说,要容易得多,只要知道学习路线以及怎么学之后,自学是完全可以入行的。所以,今天就来跟大家探讨一下这个问题。  我浏览了 BOSS 直聘、拉勾网、猎聘网等招聘网站上目前关于初级测试工程师的招聘要求,以及薪水待遇等信息。以本人所在的城...
            0 0 855
            分享
          •   摘要:  依据Jenkins官网介绍,Jenkins是一个流行的开源持续集成和交付工具,它提供了一个可扩展的插件生态系统,可以用于自动化构建、测试和部署软件项目。本文介绍如何安装使用Jenkins、常见问题解决方案以及深入应用,为自动化测试构建铺垫。  安装jdk  1.Jenkins是用Java写的,Tomcat 9.0设计为在Java SE 8或更高版本上运行。下载并安装jdk1.8.1  Javac –version  安装JDK,并配置环境变量:  在系统变量中,设置JAVA_HOME=jdk安装路径,例如C:\program files\Java\jdk,设置Path,新建值=%...
            0 0 1049
            分享
          • 摘要:在实际项目中,抛开产品需求的质量不说,但就研发质量保证而言,测试人员在测试阶段发现大量的实现类bug,每天拉着开发人员修bug;要么在临近上线的时候,发现了一个重大问题,导致修复验证时间不够,但又只能“硬着头皮”上线。解决这些问题的方法或许多种多样,但这里来聊聊如何使用研发质量保证前置来尽可能避开这些问题。关键词:研发质量,质量保证前置,尽早暴露问题,上线风险背景在实际项目中,抛开产品需求的质量不说,但在研发质量保证上面,测试人员往往需要时不时的面对不少头痛的情况:开发团队来了一个新人,本来需求量不大,但测试人员在测试时发现连主流程都跑不通,无法走下去;这次有一个从零起步的大项目,涉及多...
            0 1 2666
            分享
          • 增加1、要添加的数据项均合理,检查数据库中是否添加了相应的数据;2、按照边界值等价类设计测试用例的原则设计其他输入项的测试用例,有效等价类应能成功保存,无效等价类应有相应提示;3、不符合要求的地方要有错误提示;留出一个必填数据为空,是否有提示信息;唯一性数据的增加,如果添加重复数据,是否有相应提示;字符数校验,是否都超长文本做了字符数限制校验,并有相应的提示信息;日期类型是否有校验,输入错误格式或不合理的时间范围内取值,是否有相应提示信息;数字型校验,主要根据整数、正整数、负整数、小数、正小数、负小数等,根据实际需求情况进行测试校验,不符合要求应有相应提示信息;特殊格式,如手机号码、电子邮件、...
            11 11 1098
            分享
      • 51testing软件测试圈微信