Mysql解析json字符串数组⼀、
1 Mysql解析json字符串
解决⽅法:JSON_EXTRACT(原字段,'$.json字段名')
执⾏SQL:
SELECT JSON_EXTRACT( t.result,'$.row'),
JSON_EXTRACT( t.result,'$.value'),
JSON_EXTRACT( t.result,'$.criteria')
st  t
查询结果:
2 mysql解析json数组
⽰例:
SELECT JSON_EXTRACT(
JSON_EXTRACT( t.msg,'$.rows'), "$[0].row") as row,
JSON_EXTRACT( JSON_EXTRACT( t.msg,'$.rows') , "$[0].value") as value,
JSON_EXTRACT(JSON_EXTRACT( t.msg,'$.rows'), "$[0].criteria") as criteria,
JSON_EXTRACT(JSON_EXTRACT( t.msg,'$.rows'), "$[0].id") as id
st t
解析后数据:
$[0]: 0代表数组下标,取第⼀条数据,注意,解析后的数据带双引号,可使⽤replace函数替换
oracle 解析JSON字符串:
参考:
⼆、
1 cast(expr as type) 转化任意类型expr 为指定的类型
2 convert(expr,type), 同 cast(expr as type)
3 convert(expr using transcoding_name) 在不同地字符集间转化
4 binary expr  select binary 'a'='A';
5 extractvalue() 从xml字符串中使⽤xpath提取值
6 updatexml()返回被替换的xml⽚段
7 位运算 & | << >> ^
8 加密解密
9 current_user,current_user() 返回当有客户端验证⽤户
select user(); select current_user(); select * from mysql.user;
select session_user(); select system_user();
drop_user; rename_user
10 select database() 返回当前数据库
select schema();
11 select fund_rows() 返回查询⾏数
12 select last_insert_id()返回上⼀次插⼊的⾃增列值
13 select created table md5_tbl ;显⽰创建表的脚本
14 select row_count()返回影响的⾏数
15 select version();
16 json_array([val[,val]...]) 返回包含这些值的json数组
select json_array(1,"a",null,true,curtime());
17 json_object([key,val[,key,val]...]) 返回包含这键值对的json对象,如果key是null或参数数量是奇数发⽣出错
select json_object('id',87,'name','carrot');
18 cast(value as json)转货为json类型
19 json_quote(string) 作为json值使⽤双引号引⽤⼀个字符串,并转⽅特殊字符
select json_quote('null'),json_quote('"null"');
20 json_contains(target,candidate[,path]) 返回 1 或 0 指出是否candidate json⽂档包含在target json⽂档或者如果有path参数是否candidate 在指定的target⽂档的path中存在
如果任⼀参数是null 或者path参数没有指出target⽂档中的⼀部分,则返回null,
如果target 或者 candidate不是有效的json⽂档或者如果path参数不是⼀个有效的路径报错。
只检查数据是否在路径中存在可以⽤:json_contains_path()来代替
set @j='{"a":1,"b":2,"c":{"d":4}}';
set @j2="1";
select json_contains(@j,@j2,'$.a');
select json_contains(@j,@j2,'$.b');
set @j3='{"d":4}';
select json_contains(@j,@j3,'$.c');
21json_contains_path(json_doc,one or all,path[,path]...) 返回0或1 指⽰⼀个json⽂档是否包含给定路径下的数据
如果任何⼀个参数是null返回null,如果json_doc参数不是有效的json⽂档或任⼀路径不是有效的路径表达式或者 one_or_all 不是 one 或all,出错。
one :1 如果⾄少⼀个路径存在于⽂档中,否则 0
all:1 如果所有路径存在于⽂档中,否则 0
set @j='{"a":1,"b":2,"c":{"d":4}}'; select json_contains_path(@j,'one','$.a','$.e'); select json_contains_path(@j,'all','$.a','$.e');
22 json_extract(json_doc,path[,path]...)返回从json⽂档中按 path取到的部分数据。如果任⼀参数是null或没有到path中的数据则返回null.如果json-doc.path 不是有效的数据,则出错
select json_extract('[10,20,[30,40]]','$[1]'); select json_extract('[10,20,[30,40]]','$[1]','$[0]');
select json_extract('[10],[20],[30,40]]','$[2][*]');
23 column->path 同 json_extract()
select c,json_extract(c,"$.id"),g from jemp where json_extract(c,"$.id")>1 order by json_extract(c,"$.name");
select c,c->"$.id",g from jemp where c->"$.id">1 order by c->"$.name";
update jemp set n=1 where c->"$.id"="4";
delete from jemp where c->"$.id"="4";
select a->"$[4]" from tj10 where a->"$[4][1]" is not null;
24 json_unquote(json_extract9column,path)) json_unquote(column->path) column->>path 返回不带双引号的数据
select c->'$.name' as name from jemp where g>2 ;
select json_unquote(c->'$.name') as name from jemp where g>2
select c->> '$.name' as name from jemp where g>2
25 json_keys(json_doc[,path]) 以json数组⽅式,返回顶层键值。如果有path参数,返回path参数中的顶层键值
select json_keys('{"a":1,"b":{"c":30}}'); select json_keys('{"a":1,"b":{"c":30}}','$.b');
26 json_search(json_doc,one_or_all,search_str(,escape_cahr[,path]...])
从json_doc 返回给定的字符 search_str 对应的部分数据
set @j='["abc",[{"k":"10"},"def"],{"x":"abc"},{"y":"bcd"}]';
select json_search(@j,'one','abc');json检查
select json_search(@j,'all','abc');
select json_search(@j,'all','10');
26 json_array_append(json_doc,path,val[,path,val]...) 添加值到json⽂档的指定的数组中,并返回结果值
如果 path 指⽰⼀个范围或对象值,则添加到path对象后成为⼀个数组
set @j='["a",["b","c"],"d"]';
select json_array_append(@j,'$[1]',1); select json_array_append(@j,'$[0]',2);select json_array_append(@j,'$[1][0]',3);
set @j='{"a":1,"b":[2,3],"c":4}'; select json_array_append(@j,'$.b','x'); select json_array_append(@j,'$','z');
27 json_array_insert(json_doc,path,val[,path,val]...):更新json⽂档,插⼊到⽂档中的数组中返回修改后的⽂档,如果 path指定⼀个数组中的元素,插⼊到这个元素的位置,其他数据往右移。
set @j='["a",{"b":[1,2]},[3,4]]'; select json_array_insert(@j,'$[1]','x'); select json_array_insert(@j,'$[100]','x');
select json_array_insert(@j,'$[1].b[0]','x'); select json_array_insert(@j,'$[0]','x','$[2][1]','y');select json_array_insert(@j,'$[0]','x','$[2].b[1]','y');
插⼊⼀个值后,后⾯的值要按插⼊值后的序列取位置
28 json_insert(json_doc,path,val[,path,val]...) 插⼊数据到json_doc并返回结果
如果在路径下存在值不重写存在的值
如果元素不存在则插⼊数据,如果指定位置⼤于数组,则数组利⽤这个新值扩⼤。如果存在的值不是数组,则⾃动组成⼀个数组。
set @j='{"a":1,"b":[2,3]}'; select json_insert(@j,'$.a',10,'$.c','[true,false]'); $.a 存在则不插⼊数据 true/false 没有转为json数组
select josn_insert(@j,'$.c',cast('[true,false]' as json)); 转为json
28 json_merge_patch(json_doc,json_doc[,json_doc]...) 合并多个json⽂档并返回没有重复键的合并后的结果
如果只有⼀个参数则出错
如果第⼀参数不是⼀个对象,则作为空对象与第⼆个参数合并
如果第⼆个参数不是⼀个对象,则合并结果是第⼆个参数(不是null值的)
如果参数都是对象则合并规则:第⼀个对象中在第⼆个对象中不存在的键,第⼆个对象中在第⼀个中不存在的键,在2个对象中都存在的元素则取第⼆个对象中的值(不是null值的),
select json_merge_patch('[1,2]','[true,false]'); 如果第⼆个参数不是对象合并结果是第⼆个参数值
select json_merge_patch('{"name":"x"}','{"id":44}');
select json_merge_patch('1','true');如果第⼀个不是对象则取第⼆个值
select json_merge_patch('[1,2]','{"id":44}'); 第⼀个不是对象则按空对象合并
select json_merge_patch('{"a":1,"b":2}','{"a":3,"c":4}'); 2个键相同则取第2个键值
select json_merge_patch('{"a":1,"b":2}','{"b":null}'); 如果有相同值则取第⼆个参数中的数据如果在第⼆个参数中是空值则移除值
select json_merge_patch('{"a":{"x":1}}','{"a":{"y":2}}'); 递归合并
json_merge_patch() 与 json_merge_Preserve() ⽐较
json_merge_patch() 移除第⼀个参数中键值与第⼆个参数相同的对象,取第⼆个参数中不为null的值
json_merge_pathc()如果第⼆个参数中有相同元素键与第⼀个参数元素相同,则⽤第⼆个参数中的值替换第⼀个参数中的值,
json_merge_preserve()则追加第⼆个参数中的值到第⼀个参数中
set @x='{"a":1,"b":2}',@y='{"a":3,"c":4}',@z='{"a":5,"d":6}';
select json_merge_patch(@x,@y,@z) as patch,json_merge_preserve(@x,@y,@z) as preserve;
json_merge_preserve():合并2个相邻的数组成本⼀个;合并相邻的对象成⼀个;常量做为数组合并为
⼀个数组;⼀个数组和⼀个对象相邻则⾃动包装对象为⼀个数组合并为⼀个数组。
select json_merge_preserve('[1,2]','[true,false]');2个数组合并为⼀个数组
select json_merge_preserve('1','true');作为数组合并为⼀个数组
select json_merge_preserve('{"name":"x"}','{"id":44}'); 2个对象合并为⼀个对象
select json_merge_preserve('[1,2]','{"id":44}'); ⼀个数组⼀个对象---对象做为数组合并为⼀个数组
29 json_remove(json_doc,path[,path]...) 从json_doc移除数据并返回结果
set @j='["a",["b","c"],"d"]'; select json_remove(@j,'$[1]');
30 json_replace(json_doc,path,val[,path,val]...) 替换在json⽂档中存在的值,并返回结果.如果路径不存在则不影响
set @j='{"a":1,"b":[2,3]}'; select json_replace(@j,'$.a',10,'$.c','[true,false]');
31 json_set(json_doc,path,val[,path,val]...) 插⼊或更新json_doc的数据,并返回结果
如果⼀个元素不存在于json_doc中,这个元素被添加到对象中
如果⼀个位置放在已存在的数组的最后,则数组添加这个新值。如果存在的值不是数组,则被做为数组与新值⼀起组成数组
json_set() 替换存在的值并添加不存在的值;
json_insert()插⼊值不替换存在的值
json_replace() 替换存在的值
set @j='{"a":1,"b":[2,3]}'; select json_set(@j,'$.a',10,'$.c','[true,false]');
select json_insert(@j,'$.a',10,'$.c','[true,false]');
select json_replace(@j,'$.a',10,'$.c','[true,false]');
32json_depth(json_doc) 返回json_doc最⼤深度
空数组/空对象、深度为1的值,⼀个仅包含⼀个元素且深度为1⾮空数组或⼀个仅包含⼀个对象值并深度为1的⾮空对象深度为 2.其他情况下深度都⼤于2
select json_depth('{}'),json_depth('[]'),json_depth('true');
select json_depth('[10,20]'),json_depth('[[],{}]');
select json_depth('[10,{"a":20}]');
33 json_length(json_doc[,path]) 返回json_doc 或path参数指写的⽂档的长度
常量的长度是1
⼀个数组的长度是这个数组元素的个数
⼀个对象的长度是这个对象中成员的个数
不计算嵌套的长度
select json_length('[1,2,{"a":3}]');
select json_length('{"a":1,"b":{"c":30}}');
select json_length('{"a":1,"b":{"c":30}}','$.b');
34 json_type(json_val) 返回json值的类型
set @j='{"a":[10,true]}';
select json_type(@j);
select json_type(json_extract(@j,'$.a'));
select json_type(json_extract(@j,'$.a[0]'));
35 json_valid(val) 返回 0 或1 指⽰是否是有效的json,如果参数是null返回null
select json_valid('{"a":1}'); select json_valid('hello'); select json_valid('"hello"');
36 json_pretty(json_val) 格式化显⽰json⽂档
select json_pretty('["a",1,{"key1":"value1"},"5","77",{"key2":["value3","valueX","valueY"]},"j","2"]');
37 json_storage_size(json_val) 返回json_val存储字符数
select json_storage_size('["a",1,{"key1":"value1"},"5","77",{"key2":["value3","valueX","valueY"]},"j","2"]'); select json_storage_size('"a "') 计算空格标点占字符数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。