我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle解析复杂json的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle解析复杂json的方法

当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串,对于结构复杂的json串还无法解析。如此一来导致即便可以在PL/SQL中调用远程接口,但返回结果仍需传给前台js或java等其它代码进行处理,不太方便。

分析思路:

         1、在PL/SQL中写json串,无需声明json对象,只需直接拼接成格式正确的json字符串即可,因此数据库对象间json串的传递完全可以用varchar2或clob来代替。

         2、结构复杂的json串节点元素值基本上可以分为两类:①仍为json串②json数组,因此我们只需对这两种类型的json对象进行处理即可。

         3、在PL/SQL中处理json数组时,由于json元素是无序且可以重复的,因此我们需要对数组成员进行索引并能够获取数组长度才可以对其循环处理。

         4、java中有很多可以方便解析json串的开源jar包,且数据库支持导入java类文件,因此是否可以将java代码编译生成的class导入数据处理json呢?

解决方案:

方法1:loadjava导入java类进行解析

1、查看当前数据库已导入的java类文件

Oracle解析复杂json的方法

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

在此,我们执行导入,如下:

 Oracle解析复杂json的方法

细节:如果导入的jar包存在外部依赖,会报如下异常,继续导入外部依赖只会使要导入的jar包越来越多,最终还不一定可以导入成功,得不偿失,如下:

 Oracle解析复杂json的方法

3、导入json.jar成功后再次查看当前已导入的类文件如下

 Oracle解析复杂json的方法

4、在数据库SQL窗口执行以下脚本,创建java源码对象

Oracle解析复杂json的方法

 1 create or replace and compile java source named "JsonUtil" as 2  3 import org.json.JSONArray; 4 import org.json.JSONException; 5 import org.json.JSONObject; 6 import java.lang.Integer; 7  8 public class JsonUtil { 9   10  //取json串单个节点值11   public static String getValue(String jsonStr,String nodeName){12     String nodeValue="";13     try {14       if(jsonStr==null||!jsonStr.startsWith("{")||!jsonStr.endsWith("}")){15         nodeValue="";16       }else{17         JSONObject obj =new JSONObject(jsonStr);18         nodeValue = obj.getString(nodeName);19       }20     } catch (JSONException e) {21       nodeValue="";22     }23     return nodeValue;24   }25   //取json数组长度便于循环处理26   public static Integer getArrayLength(String jsonArrayStr){27     Integer length=0;28     try {29       if(jsonArrayStr==null||!jsonArrayStr.startsWith("[")||!jsonArrayStr.endsWith("]")){30         length=0;31       }else{32         JSONArray jsonArr = new JSONArray(jsonArrayStr);33         length=jsonArr.length();34       }35     } catch (JSONException e) {36       length=0;37     }38     return length;39   }40 41   //取json数组第index个元素42   public static String getArrayValue(String jsonStr,Integer index){43     String nodeValue="";44     try {45       if(jsonStr==null||!jsonStr.startsWith("[")||!jsonStr.endsWith("]")){46         nodeValue="";47       }else{48         JSONArray jsonArr = new JSONArray(jsonStr);49         nodeValue=jsonArr.getString(index);50       }51     } catch (JSONException e) {52       nodeValue="";53     }54     return nodeValue;55   }56 }

Oracle解析复杂json的方法

创建成功后再次查询可以看到对应的class文件:

 Oracle解析复杂json的方法

5、利用步骤4创建的class创建function(或procedure),在此为了使其跟目前数据库已存在的json处理方法区分开,我们创建一个package,如下:

Oracle解析复杂json的方法

 1 create or replace package jsonpkg 2 as 3 function getval(jsonstr varchar2,nodename varchar2) return varchar2; 4 function getarrval(jsonArrayStr varchar2,seqNo number) return varchar2; 5 function getarrlen(jsonArrayStr varchar2) return number; 6 end jsonpkg; 7 / 8 create or replace package body jsonpkg 9 as10 function  getval(jsonstr varchar2,nodename varchar2) return varchar211 as language java name 'JsonUtil.getValue(java.lang.String,java.lang.String) return java.lang.String';12    13 function getarrval(jsonArrayStr varchar2,seqNo number) return varchar214 as language java name 'JsonUtil.getArrayValue(java.lang.String, java.lang.Integer) return java.lang.String';15 16 function getarrlen(jsonArrayStr varchar2) return number17 as language java name 'JsonUtil.getArrayLength(java.lang.String) return java.lang.Integer';18 19 end jsonpkg;20 /

Oracle解析复杂json的方法

创建成功后可以查看包说明和主体:

Oracle解析复杂json的方法

Oracle解析复杂json的方法

6、测试

①简单json测试

 Oracle解析复杂json的方法

Oracle解析复杂json的方法

Oracle解析复杂json的方法

②解析复杂json

 Oracle解析复杂json的方法

至此,我们就可以很轻松的就取到json串中任意节点的值(如果节点值为数组则可以先计算数组长度再进行loop循环处理,或直接用getarrval方法取指定数组元素的值)。

 

方法2:安装开源组件PL/JSON

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

 Oracle解析复杂json的方法

优点:安装方便,解析方法较专业;缺点:新增数据库对象较多,短期学习成本较高。文档很详细,在此不再赘述。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle解析复杂json的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python3 解析复杂结构的 json

导读JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,易于阅读和编写。Python3 中可以使用json模块来对JSON数据进行编码。d1 = [{"id" :
2023-06-02

json中有复杂的嵌套如何解析

要解析复杂嵌套的JSON,可以使用递归的方式来处理。以下是一个简单的Python示例,演示如何解析具有复杂嵌套的JSON数据:```pythonimport jsondef parse_json(data):if isinstance(da
2023-08-25

mysql5.6 解析JSON字符串方式(支持复杂的嵌套格式)

目录mysql5.6 解析jsON字符串支持复杂的嵌套格式mysql5.6及以下解析json方法先说一下问题的背景下面是对应的代码 mysql5.6 解析JSON字符串支持复杂的嵌套格式废话不多说,先上代码。CREATE FUNCTI
2022-07-05

解析json的方法有哪些

解析JSON的方法有以下几种:1. 手动解析:可以使用编程语言提供的字符串处理函数和数据结构来手动解析JSON。例如,可以使用字符串函数来提取JSON对象的属性值,然后将其转换为相应的数据类型。2. 使用JSON库:大多数编程语言都提供了用
2023-09-13

Android解析JSON数据的方法分析

本文实例讲述了Android解析JSON数据的方法。分享给大家供大家参考,具体如下: JSON作为一种“轻量”的数据结构传递数据,在JS中有广泛的应用 Google公司对JSON的解析提供了gson.jar这个包,它不依赖于其他任何JAR包
2022-06-06

征服 Java JSON 处理的巅峰:解析和创建复杂数据

掌握 Java 中 JSON(JavaScript Object Notation)数据的处理技巧,解锁复杂数据解析和创建的强大功能。本文将深入探讨如何高效处理 JSON,让你的 Java 应用轻松自如地处理数据。
征服 Java JSON 处理的巅峰:解析和创建复杂数据
2024-03-07

解码/解组复杂的嵌套 JSON 数据结构

php小编草莓向大家介绍一种强大的技巧,即解码/解组复杂的嵌套 JSON 数据结构。在现代的网络应用中,JSON 数据结构被广泛使用,但是当数据结构变得复杂时,解析和提取所需信息会变得困难。本文将分享一些实用的技巧和方法,帮助大家轻松应对这
解码/解组复杂的嵌套 JSON 数据结构
2024-02-10

json在线解析的使用方法

小编给大家分享一下json在线解析的使用方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在使用json时,我们会发现json数据格式比较简单, 易于读写,经常用于信息的交互。所以我们经常使用到json解析。本文主要向大家
2023-06-14

lua解析json的方法是什么

在Lua中解析JSON的方法有以下几种:使用Lua内置的JSON库:Lua中有一些第三方库可以解析JSON数据,例如cjson、luajson等。这些库提供了一些API来解析JSON字符串并将其转换为Lua的数据结构。你可以通过使用这些库的
2023-10-21

Kotlin JSON解析的方法是什么

本篇内容介绍了“Kotlin JSON解析的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Kotlin JSON解析开发环境就是下
2023-07-05

Android中gson、jsonobject解析JSON的方法详解

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式
2022-06-06

php json解析不出来的解决方法

这篇“php json解析不出来的解决方法”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“php json解析不出来的解决方法”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所
2023-06-06

php中json解析错误的解决方法

这篇文章将为大家详细讲解有关php中json解析错误的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php json解析错误的解决办法:首先创建一个PHP示例文件;然后手动通过“json_last
2023-06-06

java的json解析方法有哪几种

在Java中,有多种方法可以解析JSON数据。以下是其中几种常用的方法:使用原生的Java API:可以使用org.json包或javax.json包中的类来解析JSON数据。例如,可以使用JSONObject和JSONArray类来解析J
java的json解析方法有哪几种
2024-02-29

解析 PHP 数组转 JSON 的新方法

php 数组转 json 有两种新方法:jsonserializable 接口: 允许对象定义自己的 json 表示形式。jsonencodereplaceflags: 控制特殊字符的处理,如 json_unescaped_unicode
解析 PHP 数组转 JSON 的新方法
2024-05-01

编程热搜

目录