oracle如何解析json,oracle 解析json格式

这篇博客介绍了如何在Oracle数据库中解析JSON格式的数据。通过创建存储过程`PKG_ANALYSE_COMMON`,包含`FUNC_PARSEJSON`和`FUNC_PARSEJSON_BYKEY`两个函数,分别用于解析JSON字符串和按指定KEY获取VALUE值。这些函数利用字符串处理方法,如替换和分割,来解析JSON格式的文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

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 ...

随机推荐

iOS原生地图开发指南续——大头针与自定义标注

iOS原生地图开发指南续——大头针与自定义标注 出自:http://www.sxt.cn/info-6042-u-7372.html 在上一篇博客中http://my.oschina.net/u/23 ...

php 审核管理

权限管理界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值