亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle解析復雜json的方法實例詳解

2024-08-29 14:00:07
字體:
來源:轉載
供稿:網友

問題背景:

         當前在Oracle數據庫(11G之前的版本)解析json沒有可以直接使用的系統方法,網上流傳的PLSQL腳本大多也只可以解析結構較單一的json串,對于結構復雜的json串還無法解析。如此一來導致即便可以在PL/SQL中調用遠程接口,但返回結果仍需傳給前臺js或java等其它代碼進行處理,不太方便。

分析思路:

         1、在PL/SQL中寫json串,無需聲明json對象,只需直接拼接成格式正確的json字符串即可,因此數據庫對象間json串的傳遞完全可以用varchar2或clob來代替。

         2、結構復雜的json串節點元素值基本上可以分為兩類:①仍為json串②json數組,因此我們只需對這兩種類型的json對象進行處理即可。

復雜json解析,oracle,解析json

         3、在PL/SQL中處理json數組時,由于json元素是無序且可以重復的,因此我們需要對數組成員進行索引并能夠獲取數組長度才可以對其循環處理。

         4、java中有很多可以方便解析json串的開源jar包,且數據庫支持導入java類文件,因此是否可以將java代碼編譯生成的class導入數據處理json呢?

解決方案:

方法1:loadjava導入java類進行解析

1、查看當前數據庫已導入的java類文件

2、執行loadjava命令導入處理json所需jar文件,在此選擇org.json而不選擇fastjson或jackson的原因是該jar包沒有外部依賴且滿足功能的同時所需導入類文件較少。

--向數據庫導入json相關jar包loadjava -r -f -u scott/tiger@xxx.xxx.xxx.xxx:1521/orcl json.jar--刪除指定jar#dropjava -u scott/tiger@xxx.xxx.xxx.xxx:1521/orcl json.jar

在此,我們執行導入,如下:

復雜json解析,oracle,解析json

細節:如果導入的jar包存在外部依賴,會報如下異常,繼續導入外部依賴只會使要導入的jar包越來越多,最終還不一定可以導入成功,得不償失,如下:

復雜json解析,oracle,解析json

3、導入json.jar成功后再次查看當前已導入的類文件如下

復雜json解析,oracle,解析json

4、在數據庫SQL窗口執行以下腳本,創建java源碼對象

create or replace and compile java source named "JsonUtil" asimport org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.lang.Integer;public class JsonUtil { //取json串單個節點值 public static String getValue(String jsonStr,String nodeName){ String nodeValue=""; try {  if(jsonStr==null||!jsonStr.startsWith("{")||!jsonStr.endsWith("}")){  nodeValue="";  }else{  JSONObject obj =new JSONObject(jsonStr);  nodeValue = obj.getString(nodeName);  } } catch (JSONException e) {  nodeValue=""; } return nodeValue; } //取json數組長度便于循環處理 public static Integer getArrayLength(String jsonArrayStr){ Integer length=0; try {  if(jsonArrayStr==null||!jsonArrayStr.startsWith("[")||!jsonArrayStr.endsWith("]")){  length=0;  }else{  JSONArray jsonArr = new JSONArray(jsonArrayStr);  length=jsonArr.length();  } } catch (JSONException e) {  length=0; } return length; } //取json數組第index個元素 public static String getArrayValue(String jsonStr,Integer index){ String nodeValue=""; try {  if(jsonStr==null||!jsonStr.startsWith("[")||!jsonStr.endsWith("]")){  nodeValue="";  }else{  JSONArray jsonArr = new JSONArray(jsonStr);  nodeValue=jsonArr.getString(index);  } } catch (JSONException e) {  nodeValue=""; } return nodeValue; }}

創建成功后再次查詢可以看到對應的class文件:

復雜json解析,oracle,解析json

5、利用步驟4創建的class創建function(或procedure),在此為了使其跟目前數據庫已存在的json處理方法區分開,我們創建一個package,如下:

create or replace package jsonpkgasfunction getval(jsonstr varchar2,nodename varchar2) return varchar2;function getarrval(jsonArrayStr varchar2,seqNo number) return varchar2;function getarrlen(jsonArrayStr varchar2) return number;end jsonpkg;/create or replace package body jsonpkgasfunction getval(jsonstr varchar2,nodename varchar2) return varchar2as language java name 'JsonUtil.getValue(java.lang.String,java.lang.String) return java.lang.String';function getarrval(jsonArrayStr varchar2,seqNo number) return varchar2as language java name 'JsonUtil.getArrayValue(java.lang.String, java.lang.Integer) return java.lang.String';function getarrlen(jsonArrayStr varchar2) return numberas language java name 'JsonUtil.getArrayLength(java.lang.String) return java.lang.Integer';end jsonpkg;/

創建成功后可以查看包說明和主體:

復雜json解析,oracle,解析json

復雜json解析,oracle,解析json

6、測試

①簡單json測試

復雜json解析,oracle,解析json

復雜json解析,oracle,解析json

復雜json解析,oracle,解析json

②解析復雜json

復雜json解析,oracle,解析json

至此,我們就可以很輕松的就取到json串中任意節點的值(如果節點值為數組則可以先計算數組長度再進行loop循環處理,或直接用getarrval方法取指定數組元素的值)。

方法2:安裝開源組件PL/JSON

下載地址: https://github.com/pljson/pljson

復雜json解析,oracle,解析json

優點:安裝方便,解析方法較專業;缺點:新增數據庫對象較多,短期學習成本較高。文檔很詳細,在此不再贅述。如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影中文字幕在线观看| 精品国产乱码久久久久久虫虫漫画| 亚洲精品一区在线观看香蕉| 91啪国产在线| 久久精品国产免费观看| 国产美女91呻吟求| 奇米四色中文综合久久| 国产精品一香蕉国产线看观看| 91在线无精精品一区二区| 精品无码久久久久久国产| 久久久久久国产三级电影| 国内精品久久久久伊人av| 亚洲香蕉av在线一区二区三区| 欧美性猛交99久久久久99按摩| 成人网在线观看| 亚洲成av人乱码色午夜| 自拍偷拍亚洲一区| 亚洲精品乱码久久久久久按摩观| 国产精品久久久久久久久久免费| 日韩在线观看av| 国产精品一区二区女厕厕| 亚洲国产小视频在线观看| 午夜精品www| 亚洲国产精品va在线观看黑人| 日韩中文字幕亚洲| 亚洲一区第一页| 亚洲国产97在线精品一区| 欧美福利在线观看| 色先锋久久影院av| 欧美日韩国产在线看| 国产精品电影在线观看| 91系列在线观看| 在线亚洲欧美视频| 亚洲成人av中文字幕| 欧美一级大片在线观看| 狠狠躁天天躁日日躁欧美| 国产精品18久久久久久首页狼| 国产精品美女午夜av| 亚洲精品有码在线| 97在线观看视频国产| 欧美午夜宅男影院在线观看| 超碰日本道色综合久久综合| 久久精品亚洲国产| 57pao成人永久免费视频| 91精品久久久久久久| 欧美一级淫片播放口| 中文字幕国产精品久久| www.xxxx精品| 亚洲精品美女在线| 欧美性受xxxx黑人猛交| 日韩精品在线电影| 国产欧美在线视频| 国产午夜一区二区| 97香蕉久久超级碰碰高清版| 国产欧美久久久久久| 国产成人高潮免费观看精品| 国产亚洲一区二区在线| 亚洲天堂av高清| 成人在线一区二区| 日韩美女视频免费在线观看| 欧美日韩国产一区二区| 国产亚洲欧美日韩一区二区| 欧美视频在线免费| 国产91ⅴ在线精品免费观看| 国产精品久久久久久久久久久久| 在线观看国产精品91| 日韩大陆欧美高清视频区| 欧美亚洲另类制服自拍| 国产精品九九久久久久久久| 亚洲欧美在线免费| 亚洲欧美日韩一区二区三区在线| 欧美大成色www永久网站婷| 国产精品日韩欧美综合| 日韩精品中文字幕视频在线| 九九精品视频在线观看| 亚洲精品按摩视频| 粉嫩老牛aⅴ一区二区三区| 久久久久久网址| 国产成+人+综合+亚洲欧洲| 日韩亚洲欧美中文高清在线| 狠狠久久亚洲欧美专区| 日韩精品中文字幕有码专区| 亚洲丁香婷深爱综合| 高潮白浆女日韩av免费看| 成人精品视频99在线观看免费| 亚洲免费一级电影| 夜夜嗨av色一区二区不卡| 美女久久久久久久| 2019中文字幕免费视频| 川上优av一区二区线观看| 午夜精品久久久久久久男人的天堂| 久久久免费在线观看| 黄色91在线观看| 日韩中文字幕视频在线观看| 亚洲xxx视频| 亚洲成人久久网| 国产成人拍精品视频午夜网站| 久久久久国产精品免费网站| 日本a级片电影一区二区| 欧美成年人在线观看| 欧美大尺度电影在线观看| 久热精品视频在线免费观看| 992tv在线成人免费观看| 欧美猛少妇色xxxxx| 久久精品夜夜夜夜夜久久| 欧美高清一级大片| 亚洲激情免费观看| 色爱av美腿丝袜综合粉嫩av| 亚洲天堂色网站| 亚洲成人中文字幕| 国产精品极品美女粉嫩高清在线| 久久久免费电影| 亚洲欧美日韩另类| 日韩国产欧美精品在线| 国产日韩欧美在线视频观看| 91精品国产自产在线老师啪| 一区二区三区视频免费在线观看| 亚洲一区亚洲二区| 欧美高清不卡在线| 98精品国产自产在线观看| 热99精品只有里视频精品| 国产成人精品免高潮费视频| 95av在线视频| 亚洲精品日韩欧美| 国产精品91在线观看| 蜜臀久久99精品久久久无需会员| 亚洲欧美在线一区二区| 欧美国产日产韩国视频| 久久久久久久久网站| 中文字幕亚洲欧美日韩在线不卡| 亚洲成色777777女色窝| 97久久精品在线| 国产午夜精品美女视频明星a级| 国产一区二区三区在线视频| 亚洲а∨天堂久久精品9966| 欧美性jizz18性欧美| 亚洲国产精品悠悠久久琪琪| 国产日本欧美在线观看| 亚洲精品v天堂中文字幕| 尤物99国产成人精品视频| 国产成人黄色av| 91超碰caoporn97人人| 日本精品视频在线观看| 国产精品综合网站| 国产精品99免视看9| 中文字幕亚洲欧美日韩高清| 国产精品久久久久久久av电影| 午夜精品免费视频| 国产视频精品xxxx| 久久久久久12| 91成人福利在线| 国产mv免费观看入口亚洲| 欧美最顶级丰满的aⅴ艳星| 亚洲视频在线观看| 夜夜嗨av一区二区三区四区| 欧美精品videossex88| 91精品在线一区| 亚洲视频一区二区| 精品久久久久久久久久ntr影视| 97视频免费在线看| 亚洲影视九九影院在线观看| www亚洲欧美| 亚洲综合大片69999| 尤物精品国产第一福利三区|