mysql之json字段值查询-JSON_CONTAINS、JSON_EXTRACT

一、JSON_CONTAINS

先来看看我百度到的定义和实例

 

  

============================================================================

解读:参数主要有三个值,分别是json对象、值、json的具体key值(可缺省)

人话:前面包含后面为真则返回1(前面包含后面!!前面包含后面!!前面包含后面!!)

写法:

1.select * from A where JSON_CONTAINS(json对象,值,json的某个key)

  • 完整简单写法(key的值也是一个json):select * from A where JSON_CONTAINS(@json,'1','$.keyname')  //筛选出json对象keyname这个key值包含1的记录
  • 不带path的写法(第一个参数已经是想比对的json)select  JSON_CONTAINS(A.xx,'1') //根据A表xx字段(json值)是否包含1返回1或0
  • 结合JSON_ARRAY的写法,如下,因为要前面包含后面,所以子集至少是[2,6]

  • 结合JSON_ARRAY写法之筛选符合任意个数元素的记录,此时把JSON_ARRAY放前面,匹配字段放后面(满足需求:scene_id包含1或6就返回)

 

 

 

二、JSON_EXTRACT

 

 

 

==============================================================================

 解读:提取json的key的值,如有多个则以数组返回

用法:可以用来判断或提取值,后面可以加like或=等匹配词,跟在select后面则返回符合的json字段值,跟在where后面则返回作为条件判断

 

ps:

以上两种写法需要数据库有执行权限,可能会报错,eg:

 

 

需要给数据库用户加权限,eg

GRANT ALL PRIVILEGES ON *.* TO ‘用户名’@’%’ ;
FLUSH PRIVILEGES;

 

三、符号写法

 写法:

字段名->"$.keyname.keyname......"

举例说明:

 

 content字段是一个json值,层级结构如下,想获取橙色字段值用于判断,写法如下

 

 

层层递进到想要的字段,注意中间如果是数组还需定位到数组的第几个元素

 

posted @ 2021-08-23 18:41  黄豆唧  阅读(12810)  评论(0编辑  收藏  举报