应用系统定制开发MySQL中json_extract函数说明

1. json_extract 应用系统定制开发使用场景说明

应用系统定制开发在日常业务开发中通常mysql应用系统定制开发数据库中某个字段会需要存储json格式,查询的时候有时json数据较大,每次全部取出再去解析查询效率较低,也较麻烦.

好在Mysql5.7及之后的版本里提供了json_extract函数,可以通过key查询value值(如果是json数组类型,可以通过下标获取对应位置的值),非常方便。

2. MySQL json_extract 函数简介

2.1 函数简介

Mysql5.7版本以后新增的功能,Mysql提供了一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部(internal binary)格式。 在Json列插入或者更新的时候将会自动验证Json文本,未通过验证的文本将产生一个错误信息。 Json文本采用标准的创建方式,可以使用大多数的比较操作符进行比较操作,例如:=, <, <=, >, >=, <>, != 和 <=>。

2.2 使用方式

数据存储的数据是json字符串(类型是vachar)。
想要查询出来json中某个字段的值,用到方法是:JSON_EXTRACT()。

语法:
**JSON_EXTRACT(json_doc, path[, path] …)**

用法提示:

  • 如果json字符串不是数组,则直接使用 $.字段名
  • 如果json字符串是数组[Array],则直接使用 $[对应的索引ID]

2.3 注意事项

JSON_EXTRACT性能验证 , 通过查看执行计划,验证全部都是全表扫描。
使用场景:数据量不大json字符串较大则可以采用,数据量较大不建议使用。

3. 数据验证

3.1 提取普通json中的值

说明:

  • 普通字段使用 $.KEY 获取
  • 数组字段使用 $.KEY[index] 获取,注意index从0开始
  • 实际使用中,如下json字符串只需要换成对应的表字段即可,但要注意需对json判空和替换等ETL转换操作.
select 	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.name") as name,	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.tel_no") as tel_no,	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[0]") as hobby_1,	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[1]") as hobby_2,	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[2]") as hobby_3,	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[3]") as hobby_4;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果:

nametel_nohobby_1hobby_2hobby_3hobby_4
“zhangsan”136-6666-6666“basketball”“run”“sing”NULL

3.2 提取json数组的值

site_user表

idnametags
1zhangsan[“COMMON”]
2lisi[“VIP”]
3wangwu[“VVIP”,“PLATINUM”]
4zhaoliu

提取用户的第一个标签:

select 	id,	name,	tags, 	json_extract(if(LENGTH(tags)>0,tags, '[]'),"$[0]")  # 如果tags无数据,赋值为空数组from site_user;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果:

idnametags
1zhangsan“COMMON”
2lisi“VIP”
3wangwu“VVIP”
4zhaoliuNULL
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发