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 ...
随机推荐
- quagga源码分析--路由信息处理zebra-rib
对于各个协议生成的路由信息的处理属于quagga中非常重要的一个功能,如何在内核进行路由增加,更新,删除是一个复杂的过程. quagga在thread任务调度中加入了一种工作队列,work_queue ...
- Java的常用包
java.lang: 这个包下包含了Java语言的核心类,如String.Math.Sytem和Thread类等,使用这个包无需使用import语句导入,系统会自动导入这个包中的所有类. java. ...
- 【Java每日一题】20170110
20170109问题解析请点击今日问题下方的"[Java每日一题]20170110"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- Docker集群实验环境布署--swarm【2 搭建本地镜像仓库】
在10.40.100.148上 # docker run -d -p 5000:5000 --restart=always --name docker-registry.venic.com - ...
- JS判断在哪个浏览器打开
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 微信小程序前置课程:Flex 布局教程(一):语法篇
原文:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 网页布局(layout)是CSS的一个重点 ...
- php学习笔记——文件(1)
一.include和require 服务器端包含 (SSI) 用于创建可在多个页面重复使用的函数.页眉.页脚或元素. include (或 require)语句会获取指定文件中存在的所有文本/代码/标 ...
- Python操作redis、memcache和ORM框架_Day13
一.memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...
- 洛谷-神奇的幻方-NOIP2015提高组复赛
题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...
- 5754Life Winner Bo
给定一个n*m的矩阵,有四种棋子(国际象棋的王,王后,骑士,车).起点在(1,1)先走到(n,m)获胜. 分析:车是nim博弈.王后是威佐夫博弈.王和骑士写两个1000*1000的预处理即可. hdu ...