oracle 解析json格式
1、
CREATE OR REPLACE PACKAGE PKG_ANALYSE_COMMON IS
-- AUTHOR : YZCHEN
-- CREATED : 2013/11/26 14:12:43
-- PURPOSE : 公共存储过程包
/*
* AUTHOR: YZCHEN DATETIME: 2013-11-26 14:20:36
* DESC: 根据P_SEQ分割字符串,并返回数据格式,默认以,分割
*/
-- 分割后的字符串临时存储类型
TYPE TYPE_SPLIT IS TABLE OF VARCHAR2(1024);
-- 分割函数
FUNCTION FUNC_SPLIT(P_LIST VARCHAR2, P_SEP VARCHAR2 := ',')
RETURN TYPE_SPLIT
PIPELINED;
/*
* AUTHOR: YZCHEN DATETIME: 2013-11-27 17:20:36
* DESC: 解析指定的JSON格式字符串
*/
-- 解析函数
FUNCTION FUNC_PARSEJSON(P_JSONSTR VARCHAR2) RETURN TYPE_SPLIT
PIPELINED;
-- 解析函数,并获取指定KEY的VALUE值
FUNCTION FUNC_PARSEJSON_BYKEY(P_JSONSTR VARCHAR2, P_KEY VARCHAR2)
RETURN VARCHAR2;
END PKG_ANALYSE_COMMON;
2、
CREATE OR REPLACE PACKAGE BODY PKG_ANALYSE_COMMON IS
/*
* @SEE DECLARETION
*/
FUNCTION FUNC_SPLIT(P_LIST VARCHAR2, P_SEP VARCHAR2 := ',')
RETURN TYPE_SPLIT
PIPELINED IS
L_IDX PLS_INTEGER;
V_LIST VARCHAR2(4000) := P_LIST;
BEGIN
LOOP
L_IDX := INSTR(V_LIST, P_SEP);
IF L_IDX > 0 THEN
PIPE ROW(SUBSTR(V_LIST, 1, L_IDX - 1));
V_LIST := SUBSTR(V_LIST, L_IDX + LENGTH(P_SEP));
ELSE
PIPE ROW(V_LIST);
EXIT;
END IF;
END LOOP;
END FUNC_SPLIT;
/*
* @SEE DECLARETION
*/
FUNCTION FUNC_PARSEJSON(P_JSONSTR VARCHAR2) RETURN TYPE_SPLIT
PIPELINED IS
V_JSONSTR VARCHAR2(1000) := P_JSONSTR;
JSONKEY VARCHAR2(50);
JSONVALUE VARCHAR2(50);
JSON VARCHAR2(1000);
TEMPCHAR VARCHAR2(1);
TEMPSTR1 VARCHAR2(1000);
TEMPSTR2 VARCHAR2(1000);
CUR_JSON1 SYS_REFCURSOR;
CUR_JSON2 SYS_REFCURSOR;
BEGIN
IF V_JSONSTR IS NOT NULL THEN
-- 先去掉前面的 [ 和后面的 ] 符号
TEMPCHAR := SUBSTR(V_JSONSTR, 1, 1);
IF '[' = TEMPCHAR THEN
V_JSONSTR := SUBSTR(V_JSONSTR, 2, LENGTH(V_JSONSTR));
END IF;
TEMPCHAR := SUBSTR(V_JSONSTR, LENGTH(V_JSONSTR), 1);
IF ']' = TEMPCHAR THEN
V_JSONSTR := SUBSTR(V_JSONSTR, 1, LENGTH(V_JSONSTR) - 1);
END IF;
-- 开始解析
JSON := REPLACE(V_JSONSTR, '{', '');
JSON := REPLACE(JSON, '}', '');
JSON := REPLACE(JSON, '"', '');
OPEN CUR_JSON1 FOR
SELECT * FROM TABLE(PKG_ANALYSE_COMMON.FUNC_SPLIT(JSON, ','));
LOOP
FETCH CUR_JSON1
INTO TEMPSTR1;
EXIT WHEN CUR_JSON1%NOTFOUND;
IF TEMPSTR1 IS NOT NULL THEN
JSONKEY := '';
JSONVALUE := '';
OPEN CUR_JSON2 FOR
SELECT * FROM TABLE(PKG_ANALYSE_COMMON.FUNC_SPLIT(TEMPSTR1, ':'));
LOOP
FETCH CUR_JSON2
INTO TEMPSTR2;
EXIT WHEN CUR_JSON2%NOTFOUND;
PIPE ROW(TEMPSTR2);
END LOOP;
END IF;
END LOOP;
END IF;
END FUNC_PARSEJSON;
/*
* @SEE DECLARETION
*/
FUNCTION FUNC_PARSEJSON_BYKEY(P_JSONSTR VARCHAR2, P_KEY VARCHAR2)
RETURN VARCHAR2 IS
V_JSONSTR VARCHAR2(4000) := P_JSONSTR;
JSONKEY VARCHAR2(50);
JSONVALUE VARCHAR2(50);
JSON VARCHAR2(4000);
TEMPCHAR VARCHAR2(1);
TEMPSTR1 VARCHAR2(4000);
TEMPSTR2 VARCHAR2(4000);
CUR_JSON1 SYS_REFCURSOR;
CUR_JSON2 SYS_REFCURSOR;
IDX NUMBER := 0;
BEGIN
IF V_JSONSTR IS NOT NULL THEN
-- 先去掉前面的 [ 和后面的 ] 符号
TEMPCHAR := SUBSTR(V_JSONSTR, 1, 1);
IF '[' = TEMPCHAR THEN
V_JSONSTR := SUBSTR(V_JSONSTR, 2, LENGTH(V_JSONSTR));
END IF;
TEMPCHAR := SUBSTR(V_JSONSTR, LENGTH(V_JSONSTR), 1);
IF ']' = TEMPCHAR THEN
V_JSONSTR := SUBSTR(V_JSONSTR, 1, LENGTH(V_JSONSTR) - 1);
END IF;
-- 开始解析
JSON := REPLACE(V_JSONSTR, '{', '');
JSON := REPLACE(JSON, '}', '');
JSON := REPLACE(JSON, '"', '');
OPEN CUR_JSON1 FOR
SELECT * FROM TABLE(PKG_ANALYSE_COMMON.FUNC_SPLIT(JSON, ','));
LOOP
FETCH CUR_JSON1
INTO TEMPSTR1;
EXIT WHEN CUR_JSON1%NOTFOUND;
IDX := 0;
IF TEMPSTR1 IS NOT NULL THEN
JSONKEY := '';
JSONVALUE := '';
OPEN CUR_JSON2 FOR
SELECT * FROM TABLE(PKG_ANALYSE_COMMON.FUNC_SPLIT(TEMPSTR1, ':'));
LOOP
FETCH CUR_JSON2
INTO TEMPSTR2;
EXIT WHEN CUR_JSON2%NOTFOUND;
IF IDX > 0 THEN
RETURN TEMPSTR2;
END IF;
IF TEMPSTR2 = P_KEY THEN
IDX := IDX + 1;
END IF;
END LOOP;
END IF;
END LOOP;
END IF;
RETURN '';
END FUNC_PARSEJSON_BYKEY;
END PKG_ANALYSE_COMMON;
oracle 解析json格式的更多相关文章
- WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)
DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...
- WP8解析JSON格式(使用Newtonsoft.Json包)
DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式. 这里举一个简单的解析JSON格式的例子(更多JSON操作): { "response&q ...
- 解析json格式数据
实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...
- 用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- 实现android上解析Json格式数据功能
实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...
- Python3基础 json.loads 解析json格式的数据,得到一个字典
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- $Java-json系列(一):用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- 使用google的GSON解析json格式的数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...
- Scala解析Json格式
Scala解析Json格式 代码块 Scala原生包 导入包 import scala.util.parsing.json._ def main(args: Array[String]): Unit ...
随机推荐
- nginx整合tomcat集群并做session共享----测试案例
最近出于好奇心,研究了一下tomcat集群配置,并整合nginx,实现负载均衡,session共享,写篇记录,防止遗忘.---------菜鸡的自我修炼. 说明:博主采用一个web项目同时部署到两台t ...
- 关于javascript变量作用域的研究。
开始 一个变量的作用域(scope)是程序源代码中定义这个变量的区域.全局变量具有全局作用域,在javascript中的任何地方都是有定义的.然而在函数内申明的变量只在函数体内有定义.他们是局部变量, ...
- RocketMQ源码 — 一、 quikstart
RocketMQ quikstart 获取源码 git clone https://github.com/alibaba/RocketMQ.git 编译打包 cd RocketMQ bash inst ...
- windows环境下解决web服务假死的问题
最近在windows系统在部署web服务器,发现很不稳定.web服务有容易假死,改过配置换过各种web软件,如apache.nginx都不管用. 所以干脆做个简易的定时检测Web服务状态的软件.一旦w ...
- Float 的那些事
css float 定义元素浮动到左侧或者右侧.其出现的本意是让文字环绕图片而已. left.right.inherit(从父级元素获取float值).none 一.浮动的性质 1. 包裹性 disp ...
- Struts框架的入门使用
1.struts框架的使用 导入jar包 1.commons-fileupload-1.2.jar 2. freemarker-2.3.15.jar 3.ognl-2.7.3.jar 4.struts ...
- Ajax beforeSend和complete 方法与防止重复提交
$.ajax({ beforeSend: function(){ // Handle the beforeSend event }, complete: function(){ // Handle t ...
- android studio Activity标题栏研究
第一次研究时间:2016/7/30,以下研究主要存在于当前最新版本的android studio上.eclipse请参考 一.头部标题取消 当前版本新建工程在 application中默认主题为 an ...
- 闹心的python编码
说起编码,真是十分忧伤.每次听课都是绕了半天把自己搞糊涂.今天特意来整理一下思路. What 编码!? 基本概念很简单.首先,我们从一段信息即消息说起,消息以人类可以理解.易懂的表示存在.我打算将这种 ...
- 效果网址http://sc.chinaz.com/tag_jiaoben/tupianlunbo.html
http://sc.chinaz.com/tag_jiaoben/tupianlunbo.html