MySQL5.7中增加的JSON特性的处理方法JSON_EXTRACT和JSON_ARRAY_APPEND以及M ...

饭宝  论坛元老 | 2024-9-23 10:15:48 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1038|帖子 1038|积分 3114

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、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可以通过键索引访问,也可以通过数字索引访问,示例如下:
  1. #语法:
  2. JSON_EXTRACT(json_doc, path[, path] ...)
  3. #JSON_EXTRACT查询示例,解析整数索引的数组
  4. select  id,chars,JSON_EXTRACT(chars,"$[0]","$[1]","$[2]","$[1]") as charjson from test where id=2 ;
  5. #查询得到的记录如下:
  6. 2|["test0","test1.","2test2."]|["test0", "test1.", "2test2.", "test1."]
  7. #JSON_EXTRACT查询示例,解析键值对的对象
  8. select  id,chars,JSON_EXTRACT(chars,"$.name","$.mark") as charjson from test where id=3 ;
  9. 3|{"id":"12345","name":"04007.cn","mark":"test."}|["04007.cn", "test."]
  10. 可见JSON_EXTRACT对json操作的时候有两种方式提取,对于键值对的内容通过键名提取,对于索引的数组使用数字下标提取。新查询得到的内容是默认组成新的数组json。
复制代码
2.JSON_ARRAY_APPEND的利用:

        JSON_EXTRACT是从数据库中的json中提取目的值,而JSON_ARRAY_APPEND则是为实现查询的时间把数据添加进查询结果。
  1. #语法:
  2. JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
  3. #JSON_ARRAY_APPEND查询示例
  4. select  id,chars,JSON_ARRAY_APPEND(chars,'$[1]',"test3",'$[0]',"test4") as charjson from test where id=2 ;
  5. #执行结果如下:
  6. 2 | ["test0","test1."]|[["test0", "test4"], ["test1.", "test3"]]
  7. select  id,chars,JSON_ARRAY_APPEND(chars,'$.name',"hello") as charjson from test where id=3 ;
  8. #执行结果如下:
  9. 3 | {"id":"12345","name":"04007.cn"} | {"id": "12345", "name": ["04007.cn", "hello"]}
  10. #也可以执行对$进行操作
  11. select  id,chars,JSON_ARRAY_APPEND(chars,'$',"hello") as charjson from test where id=3 ;
  12. 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)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表