iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle解析复杂json的方法
  • 605
分享到

Oracle解析复杂json的方法

2024-04-02 19:04:59 605人浏览 独家记忆
摘要

当前在oracle数据库(11G之前的版本)解析JSON没有可以直接使用的系统方法,网上流传的PLsql脚本大多也只可以解析结构较单一的json串,对于结构复杂的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的方法

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


您可能感兴趣的文档:

--结束END--

本文标题: Oracle解析复杂json的方法

本文链接: https://www.lsjlt.com/news/41637.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Oracle解析复杂json的方法实例详解
    问题背景:          当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的P...
    99+
    2024-04-02
  • Python3 解析复杂结构的 json
    导读JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,易于阅读和编写。Python3 中可以使用json模块来对JSON数据进行编码。d1 =&nbs...
    99+
    2023-06-02
  • json中有复杂的嵌套如何解析
    要解析复杂嵌套的JSON,可以使用递归的方式来处理。以下是一个简单的Python示例,演示如何解析具有复杂嵌套的JSON数据:```...
    99+
    2023-08-25
    json
  • mysql5.6解析JSON字符串方式(支持复杂的嵌套格式)
    目录mysql5.6 解析JSON字符串支持复杂的嵌套格式mysql5.6及以下解析json方法先说一下问题的背景下面是对应的代码 mysql5.6 解析JSON字符串 支...
    99+
    2024-04-02
  • 征服 Java JSON 处理的巅峰:解析和创建复杂数据
    解析 JSON 数据 解析 JSON 数据是处理复杂数据的关键一步。在 Java 中,我们可以使用以下方法: 使用 Gson 库:Gson 是一个广泛使用的 JSON 解析库,提供了一个简洁且高效的 API,如下所示: Gson g...
    99+
    2024-03-07
    JSON、Java、解析、创建、复杂数据
  • Python解析JSON数据的方法
    Python解析JSON数据的方法 在Python中,我们可以使用内置的json模块来解析JSON数据。下面是一个简单的例子: import json# JSON数据json_str = '{"nam...
    99+
    2023-09-01
    python json 开发语言
  • 解析json的方法有哪些
    解析JSON的方法有以下几种:1. 手动解析:可以使用编程语言提供的字符串处理函数和数据结构来手动解析JSON。例如,可以使用字符串...
    99+
    2023-09-13
    json
  • 解码/解组复杂的嵌套 JSON 数据结构
    php小编草莓向大家介绍一种强大的技巧,即解码/解组复杂的嵌套 JSON 数据结构。在现代的网络应用中,JSON 数据结构被广泛使用,但是当数据结构变得复杂时,解析和提取所需信息会变得...
    99+
    2024-02-10
  • Python使用JSON库解析JSON数据的方法
    目录1 如何在网页中获取 JSON 数据?2 Python 内置的 JSON 库1 如何在网页中获取 JSON 数据? 打开一个具有动态渲染的网页,按 F12 打开浏览器开发工具,点...
    99+
    2024-04-02
  • Kotlin JSON解析的方法是什么
    本篇内容介绍了“Kotlin JSON解析的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Kotlin JSON解析开发...
    99+
    2023-07-05
  • json在线解析的使用方法
    小编给大家分享一下json在线解析的使用方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在使用json时,我们会发现json数据格式比较简单, 易于读写,经常用于信息的交互。所以我们经常使用到json解析。本文主要向大家...
    99+
    2023-06-14
  • lua解析json的方法是什么
    在Lua中解析JSON的方法有以下几种: 使用Lua内置的JSON库:Lua中有一些第三方库可以解析JSON数据,例如cjson、...
    99+
    2023-10-21
    lua json
  • php json解析不出来的解决方法
    这篇“php json解析不出来的解决方法”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“php json解析不出来的解决方法”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所...
    99+
    2023-06-06
  • PHP 数组 JSON 转换的复杂性
    在 php 中,复杂数组和 json 的转换涉及以下步骤:序列化复杂数组:使用 json_unescaped_unicode 选项处理 unicode 字符。反序列化复杂 json:使用...
    99+
    2024-05-03
    php json
  • php中json解析错误的解决方法
    这篇文章将为大家详细讲解有关php中json解析错误的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php json解析错误的解决办法:首先创建一个PHP示例文件;然后手动通过“json_last...
    99+
    2023-06-06
  • java的json解析方法有哪几种
    在Java中,有多种方法可以解析JSON数据。以下是其中几种常用的方法: 使用原生的Java API:可以使用org.json包...
    99+
    2024-02-29
    java json
  • 解析 PHP 数组转 JSON 的新方法
    php 数组转 json 有两种新方法:jsonserializable 接口: 允许对象定义自己的 json 表示形式。jsonencodereplaceflags: 控制特殊字符的处...
    99+
    2024-05-01
    php json
  • Dom4j解析xml复杂多节点报文方式
    目录Dom4j解析xml复杂多节点报文XML的解析方式分为四种本文介绍的是DOM4J方式解析主要核心代码如下dom4j解析多层xmlDom4j解析xml复杂多节点报文 XML是一种通...
    99+
    2024-04-02
  • Go语言实现JSON解析的方法详解
    目录1、json序列化2、Json反序列化为结构体对象3、Json反序列化为map类型4、Tag的使用在日常项目中,使用Json格式进行数据封装是比较常见的操作,看一下golang怎...
    99+
    2024-04-02
  • Golang解析JSON遇到的坑及解决方法
    目录写在前面空指针会被解析成字符串"null"int类型会被解析成float64写在前面 在写go的时候经常用到序列化、反序列化,记录一下遇到过的坑。 空指针会被...
    99+
    2023-02-26
    Golang解析JSON Go 解析JSON Go JSON
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作