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可以通过键索引访问,也可以通过数字索引访问,示例如下:

sql 复制代码
#语法:
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则是为实现查询的时候把数据添加进查询结果。

sql 复制代码
#语法:
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)

相关推荐
黎明晓月2 小时前
PostgreSQL提取JSON格式的数据(包含提取list指定索引数据)
postgresql·json·list
心死翼未伤11 小时前
python从入门到精通:pyspark实战分析
开发语言·数据结构·python·spark·json
Mephisto.java20 小时前
【大数据学习 | flume】flume Sink Processors与拦截器Interceptor
大数据·sql·oracle·sqlite·json·flume
ac-er88881 天前
ThinkPHP中使用ajax接收json数据的方法
前端·ajax·json·php
0x派大星1 天前
【Golang】——Gin 框架中的 API 请求处理与 JSON 数据绑定
开发语言·后端·golang·go·json·gin
不能只会打代码2 天前
支持用户注册和登录、发布动态、点赞、评论、私信等功能的社交媒体平台创建!!!
前端·css·后端·html·json·媒体·社交媒体平台
愚公码农2 天前
MySQL json字段索引添加及使用
数据库·mysql·json
拧螺丝专业户2 天前
gin源码阅读(2)请求体中的JSON参数是如何解析的?
前端·json·gin
Mephisto.java2 天前
【大数据学习 | Spark】yarn-client与yarn-cluster的区别
大数据·sql·oracle·spark·json·database
Mephisto.java2 天前
【大数据学习 | Spark】spark-shell开发
大数据·sql·oracle·spark·sqlite·json