当前位置: 首页 > news >正文

MySQL5.7中增加的JSON特性的处理方法JSON_EXTRACT和JSON_ARRAY_APPEND以及MYSQL中JSON操作的方法大全

一、MySQL5.7中增加的JSON特性的处理方法JSON_EXTRACT和JSON_ARRAY_APPEND

    数据库中有些字段的存储可能是json字符串,在MYSQL5.7之前直接使用sql不好操作,但在mysql5.7中增加了对json处理的一些函数,比如JSON_EXTRACT分解JSON 并查询以及JSON_ARRAY_APPEND向已有的json字段中直接添加值,而不需要用程序取出来反json添加字段再序列化存入。

1.JSON_EXTRACT的使用:

        如果要从库里只查出一长串json中的某个字段,可以直接使用JSON_EXTRACT进行提取。它可以直接分解JSON并查询,实际上就是在提供的path下查找值。JSON_EXTRACT可以通过键索引访问,也可以通过数字索引访问,示例如下:

#语法:
JSON_EXTRACT(json_doc, path[, path] ...)
#JSON_EXTRACT查询示例,解析整数索引的数组 
select  id,chars,JSON_EXTRACT(chars,"$[0]","$[1]","$[2]","$[1]") as charjson from test where id=2 ;
#查询得到的记录如下:
2|["test0","test1.","2test2."]|["test0", "test1.", "2test2.", "test1."]
#JSON_EXTRACT查询示例,解析键值对的对象 
select  id,chars,JSON_EXTRACT(chars,"$.name","$.mark") as charjson from test where id=3 ;
3|{"id":"12345","name":"04007.cn","mark":"test."}|["04007.cn", "test."]
可见JSON_EXTRACT对json操作的时候有两种方式提取,对于键值对的内容通过键名提取,对于索引的数组使用数字下标提取。新查询得到的内容是默认组成新的数组json。

2.JSON_ARRAY_APPEND的使用:

        JSON_EXTRACT是从数据库中的json中提取目标值,而JSON_ARRAY_APPEND则是为实现查询的时候把数据添加进查询结果。

#语法:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
#JSON_ARRAY_APPEND查询示例
select  id,chars,JSON_ARRAY_APPEND(chars,'$[1]',"test3",'$[0]',"test4") as charjson from test where id=2 ;
#执行结果如下:
2 | ["test0","test1."]|[["test0", "test4"], ["test1.", "test3"]]
select  id,chars,JSON_ARRAY_APPEND(chars,'$.name',"hello") as charjson from test where id=3 ;
#执行结果如下:
3 | {"id":"12345","name":"04007.cn"} | {"id": "12345", "name": ["04007.cn", "hello"]}
#也可以执行对$进行操作
select  id,chars,JSON_ARRAY_APPEND(chars,'$',"hello") as charjson from test where id=3 ;
3 | {"id":"12345","name":"04007.cn"} | [{"id": "12345", "name": "04007.cn"}, "hello"]

3.文章评论

Level : 1.    User:us20200117174931-934    Time:2020-03-05 20:45:50
感觉mysql的JSON类型就是一个鸡肋。 

二、MYSQL中JSON操作的方法大全

#、创建json的方法:

1. 创建JSON数组形式和JSON对象的数据

JSON_ARRAY([val[, val] ...])
JSON_OBJECT([key, val[, key, val] ...])

2.修改json的方法,在JSON数组后增加新的数据
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)

3.合并JSON数据
JSON_MERGE(json_doc, json_doc[, json_doc] ...)

4.删除一部分JSON数据
JSON_REMOVE(json_doc, path[, path] ...)

5.替换一部分JSON数据
JSON_REPLACE(json_doc, path, val[, path, val] ...)

6.有存在的数据就替换,没有就插入
JSON_SET(json_doc, path, val[, path, val] ...)

#、查询json的方法

1.查找是否包含
JSON_CONTAINS(json_doc, val[, path])

2.查找path(就是key)是否存在
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
第二个参数one或者all表示是要全部满足还是只满足一个
mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';

3.分解JSON 并查询,实际上就是在提供的path下查找值
JSON_EXTRACT(json_doc, path[, path] ...)
JSON_EXTRACT 还可以使用一种替代语法 column->path直接查询json中的列,示例如下:
mysql> SELECT c, JSON_EXTRACT(c, "$.id"), g FROM jemp WHERE c->"$.id" > 1  ORDER BY c->"$.name";
mysql> SELECT c, c->"$.id", g FROM jemp WHERE c->"$.id" > 1  ORDER BY c->"$.name";

4.提出当前提供path下的key值
JSON_KEYS(json_doc[, path])

5.按着提供的值去查询,返回path数组。one_or_all南
JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])

#、查询JSON自有属性的方法

1.查询当前JSON深度
JSON_DEPTH(json_doc)
2.查询当前层级(path)下对象或者数组的元素数量
JSON_LENGTH(json_doc[, path])

3.返回JSON值类型
JSON_TYPE(json_val)
4.验证是否是JSON
JSON_VALID(val)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 小程序服务零工市场
  • 神经网络 归一化层
  • shell脚本(9.20)
  • 机器翻译之多头注意力(MultiAttentionn)在Seq2Seq的应用
  • 音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析
  • 大健康裂变分销小程序开发
  • linux 之0号进程、1号进程、2号进程
  • 9月18日
  • 前端univer创建、编辑excel
  • Docker 以外置数据库方式部署禅道
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • Hadoop里面MapReduce的序列化与Java序列化比较
  • Java知识点小结3:内存回收
  • 关于c#中异步async和await的理解
  • PyTorch 图像分割模型教程
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Angularjs之国际化
  • DOM的那些事
  • JavaScript异步流程控制的前世今生
  • scrapy学习之路4(itemloder的使用)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • ubuntu 下nginx安装 并支持https协议
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • webpack入门学习手记(二)
  • 程序员该如何有效的找工作?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端之React实战:创建跨平台的项目架构
  • 使用 QuickBI 搭建酷炫可视化分析
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • ​2020 年大前端技术趋势解读
  • #14vue3生成表单并跳转到外部地址的方式
  • #AngularJS#$sce.trustAsResourceUrl
  • (1)无线电失控保护(二)
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (二十四)Flask之flask-session组件
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (黑马C++)L06 重载与继承
  • (六)激光线扫描-三维重建
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (杂交版)植物大战僵尸
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .libPaths()设置包加载目录
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net反编译的九款神器
  • .net快速开发框架源码分享
  • .Net组件程序设计之线程、并发管理(一)
  • @ComponentScan比较
  • [ A*实现 ] C++,矩阵地图
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序