文章详细介绍了MySQL中处理JSON数据的各种函数,包括json_contains用于判断JSON对象是否包含特定值,json_extract用于提取JSON对象的值,以及json_keys获取JSON对象的顶层键等。还讨论了json_search的使用,用于在JSON中查找指定字符串的路径。
摘要由CSDN通过智能技术生成
mysq json 主要有
JSON 对象
(json object )和
JSON 数组
(json array )两种类型
$
表示整个json对象,在索引数据时用下标(对于json array,从0开始)或键值(对于json object,含有特殊字符的key要用"括起来,比如$.“my name”)。
分类
|
函数
|
描述
|
创建json
|
json_array
|
创建json数组 (json_array(数组元素))
|
|
json_object
|
创建json对象(json_object(key,value,key,value…))
|
修改json
|
json_remove
|
删除元素(json_remove(json,path))
|
|
json_merge
|
json合并(json_object同路径值合并成数组)
|
|
json_array_append
|
在json数组的某个下标对应元素中添加值
|
|
json_array_insert
|
为json数组添加元素(json_array_insert(json,path,value))
|
查询json
|
json_quote
|
将json转成json字符串类型
|
|
json_contains
|
判断是否包含某个json值
|
|
json_contains_path
|
判断某个路径下是否包json值
|
|
json_extract
|
提取json值
|
|
column->path
|
json_extract的简洁写法,MYSQL 5.7.9开始支持
|
|
column->>path
|
json_unquote(column -> path)的简洁写法
|
|
json_keys
|
提取json中的键值jison数组
|
|
json_search
|
按给定字符串关键字搜索
|
其他
|
json_valid
|
json格式校验(校验通过返回1,否则返回0)
|
|
json_type
|
json_type(返回OBJECT或ARRAY,当json格式错误,报错)
|
|
json_depth
|
json深度(到value最大深度)
|
|
json_length
|
json长度(顶层元素个数)
|
|
json_pretty
|
json格式化
|
注: $表示整个json对象,
$.*为整个json文件下; $**.key表示JSON中所有key的值
json_contains 判断是否包含某个,返回值0或1,0代表存在该值,1代表不存在该值。
规则: json_contains(json, 查询值, 查询路径),如果任何参数为NULL或路径参数未标识目标文档的某个部分,则返回NULL;
select json_contains('{"a": {"a":2,"b":1},"b":2}','2','$.b'); -- 既在json中 b这个key的路径下存在为2的value,返回1
select json_contains('{"a": {"a":2,"b":1},"b":2}','2','$.a'); --在json中 $.a 这个key不存在2的这个vaule,因此返回0.($代表整个JSON,$.a获取数据为 {"a":1,"b":2} 这个JSON对象,而不存在单独的 2 这个值,从而返回0)
select json_contains('{"a": {"a":2,"b":1},"b":2}','2','$.a.a'); -当取到正确的路径下时,返回1
json_contains_path 判断JSON文档是都包含给定路径上的数据
规则:json_contains_path(json, one_or_all, path(可多个)),如果任何参数为NULL,则返回NULL;如果JSON无法解析、或 one_or_all 不为 ‘one’ 或则 ‘all’、或任何路径参数都不是有效的路径表达式 ,则报错。
1)‘one’:如果文档中至少存在一个路径,则为1,否则为0。
2)‘all’:如果文档中存在所有路径,则为1,否则为0。
select json_contains_path('{"a": {"a":2,"b":1},"b":2}','one','$.a') -- 在JSON中存在一个'$.a'的路径,返回1
select json_contains_path('{"a": {"a":2,"b":1},"b":2}','one','$.e') -- 在JSON中不存在一个'$.e'的路径,返回0
select json_contains_path('{"a": {"a":2,"b":1},"b":2}','one','$.a','$.e') -- 'one'表示在JSON中,存在'$.a','$.e'任意一路径,则返回1。
select json_contains_path('{"a": {"a":2,"b":1},"b":2}','all','$.a','$.e') -- 'all'表示后续路径('$.a','$.e')都要存在,才会返回1,否则返回0('$.e'不存在)。