mysql處理json資料(自我總結,後期會繼續補充)
阿新 • • 發佈:2018-12-29
1.如果資料量小的話,將json資料直接複製到mysql的json欄位中,如果資料過大可以通過java等後臺形式對json資料解析,然後寫入資料庫中。
查詢操作
select *,json->'$.features[0].geometry.rings' as rings from JSON;
從一張表讀取一部分資料存入另一張表中(一條資料)
insert into DT_village(name, border) SELECT json->'$.features[0].attributes.CJQYMC',json->'$.features[0].geometry.rings' from JSON;
讀取json資料並寫入資料庫(此時使用的是定義函式的形式來執行方法,可以定義便量)
#清空資料庫 TRUNCATE table DT_village; #定義儲存過程 delimiter // DROP PROCEDURE IF EXISTS insert_test_val; ##num_limit 要插入資料的數量,rand_limit 最大隨機的數值 CREATE PROCEDURE insert_test_val() BEGIN DECLARE i int default 0; DECLARE a,b varchar(5000); WHILE i<10 do set a=CONCAT('$.features[',i,'].attributes.CJQYMC'); set b=CONCAT('$.features[',i,'].geometry.rings'); insert into DT_village(name, border) select #json->'$.features[0].attributes.CJQYMC',json->'$.features[0].geometry.rings' # (json->a),(json->b) json_extract(json,a),json_extract(json,b) from JSON; set i = i + 1; END WHILE; END // #呼叫儲存過程 call insert_test_val();
呼叫遊標的方式獲取jsosn資料中的一行,並執行插入操作
delimiter // drop procedure if exists StatisticStore; CREATE PROCEDURE StatisticStore() BEGIN #建立接收遊標資料的變數 declare j json;#儲存json資料 DECLARE i int default 0; #建立總數變數,記錄執行次數,控制迴圈 DECLARE a,b,c varchar(5000);#定義json陣列中的某個資料的鍵值 #建立結束標誌變數 declare done int default false; #建立遊標 declare cur cursor for select json from JSON where name = '1'; #指定遊標迴圈結束時的返回值 declare continue HANDLER for not found set done = true; #設定初始值 set a=CONCAT('$.features[',i,'].attributes.XZQDM'); set b=CONCAT('$.features[',i,'].attributes.XZQMC'); set c=CONCAT('$.features[',i,']'); #開啟遊標 open cur; #開始循環遊標裡的資料 read_loop:loop #根據遊標當前指向的一條資料 fetch cur into j; #判斷遊標的迴圈是否結束 if done then leave read_loop;#跳出遊標迴圈 end if; #這裡可以做任意你想做的操作 WHILE i<11 do insert into dt_border(xzq_code,name,border) select json_extract(j,a),json_extract(j,b),json_extract(j,c) from JSON; set i = i + 1; END WHILE; #結束遊標迴圈 end loop; #關閉遊標 close cur; #輸出結果 select j,i; END; #呼叫儲存過程 call StatisticStore();