mysql 解析 json格式的字段

# 创建一个存储过程,解析某表的一个json串字段,并拆分字段存入到表
# 要解析的json串格式 :  [{"count":22,"prizeType":6,"prizeValue":11012},{"count":44,"prizeType":6,"prizeValue":21000}]
delimiter $$
use `marketcenter`$$ drop procedure if exists `p_gift_count`$$ create definer=`root`@`%` procedure `p_gift_count`() begin declare i int default 0; #内层循环,json串的列表循环 declare iid int default 0; #表记录的主键id declare jsonStr varchar(255); #接收json串字段 declare flag int default 0; #游标循环结束标识 declare cur cursor for select t.`id`,t.`attr` from prize_package_template t; #定义游标 declare continue handler for not found set flag=1;#游标循环结束条件 delete from mldn.`temp_prize_template`; open cur; fetch cur into iid,jsonStr; #游标循环获取数据并赋值 while flag<>1 do #select t.`attr`->>'$[*]' into @aa from prize_package_template t where t.id=12000; select json_length(jsonStr); set @len=json_length(jsonStr); #获取json列表字符串的长度 set i=0; while i<@len do select json_extract(jsonStr,concat('$[',i,']')) into @res; #按顺序解析 json列表元素 select i; select @res; #解析 json的具体字段 insert into mldn.`temp_prize_template` values(iid,json_extract(@res,'$.prizeValue'),json_extract(@res,'$.prizeType'),json_extract(@res,'$.count')); set i=i+1; end while; fetch cur into iid,jsonStr; end while; end$$ delimiter ;

 

posted @ 2020-08-25 14:34  小金儿  阅读(2107)  评论(0编辑  收藏  举报