MySql操作Json字段

MySql json字段操作函数

分类函数描述
创建json json_array 创建json数组
  json_object 创建json对象
  json_quote 将json转成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中的键值为json数组
  json_search 按给定字符串关键字搜索json,返回匹配的路径
修改json json_append 废弃,MySQL 5.7.9开始改名为json_array_append
  json_array_append 末尾添加数组元素,如果原有值是数值或json对象,则转成数组后,再添加元素
  json_array_insert 插入数组元素
  json_insert 插入值(插入新值,但不替换已经存在的旧值)
  json_merge 合并json数组或对象
  json_remove 删除json数据
  json_replace 替换值(只替换已经存在的旧值)
  json_set 设置值(替换旧值,并插入不存在的新值)
  json_unquote 去除json字符串的引号,将值转成string类型
返回json属性 json_depth 返回json文档的最大深度
  json_length 返回json文档的长度
  json_type 返回json值得类型
  json_valid 判断是否为合法json文档

一、查询json字段中某一个对象

 

SELECT id,jsontest,jsontest->'$.row' as row1,jsontest->'$.celldata' as celldata FROM `test`

 

 字符串返回的不同

SELECT id,jsontest,jsontest->'$.name' as name1, jsontest->>'$.name' as name2 FROM `test` where id=1

查询时,不返回指定字段

 

SELECT id,json_remove(jsontest,"$.cell") from test where id=2;

二、更新json

update test set jsontest=json_set(jsontest,"$.x","vv")  where id=2;

update test set jsontest=json_set(jsontest,"$.x.z","bb")  where id=2;

替换整个对象

update test set jsontest=json_set(jsontest,"$.x",JSON_OBJECT("a","a1","b","b1"))  where id=2;

更新多个key

update test set jsontest=json_set(jsontest,"$.k2","1"), jsontest=json_set(jsontest,"$.k","2")  where id=2;

替换数组

update test set jsontest=json_set(jsontest,"$.x",JSON_Array("a1","a2","a3"))  where id=2;

插入数据组(对象为json字符串)

update test set jsontest=json_array_append(jsontest,"$.cell",CAST('{"r": 1, "v": "v1"}' as JSON))  where id=2;

 

三、删除json

update test set jsontest=json_remove(jsontest,"$.x.a")  where id=2;

update test set jsontest=json_remove(jsontest,"$.x")  where id=2;

四、数组处理

示例:{"k": "vv", "cell": [{"r": 1, "v": "v1"}]}

update test set jsontest=json_array_append(jsontest,"$.cell",json_object("r",1, "v", "v1"))  where id=2;

插入到数组0

update test set jsontest=json_array_insert(jsontest,"$.cell[0]",json_object("r",2, "v", "v2"))  where id=2;

去除位置为1

update test set jsontest=json_remove(jsontest,"$.cell[1]")  where id=2;

更新集合位置x的对象中key的值 

update test set jsontest=json_set(jsontest,"$.cell2[1].r",CAST('{"ct":"test","v":1,"m":"1222"}' as JSON))  where id=2;

 

 

 

 

四、CAST使用

更新中

update test t set t.jsontest=json_set(t.jsontest,"$.x",CAST('{"a":"b"}' as JSON))  where id=2;

 

 

查询中

SELECT t.jsontest->>'$.cell', CAST(t.jsontest->>'$.cell' AS JSON) from test t where t.id=2;

 

 

 

 

 

 

 

 

 

 

posted @ 2021-01-19 13:44  桥头堡洗脚城  阅读(4770)  评论(0编辑  收藏  举报