PLJSON开源库介绍(一)

本文介绍了PLJSON——一个用于Oracle存储过程中处理JSON对象的开源库。文章详细讲解了PLJSON的基本类型及其转换方法,并提供了安装步骤和示例代码。

本文来自李明子csdn博客(http://blog.youkuaiyun.com/free1985),商业转载请联系博主获得授权,非商业转载请注明出处!

1 引子

随着近年来网络带宽迅速提升和MVC思想的深入人心,JSON越来越多的被用于B/S架构项目的数据交换。JSON不但在诸如EasyUI等流行的前端库中被广泛使用,各后端开发语言也纷纷涌现出对JSON进行操作处理的类库。而在关系数据库领域,对JSON的支持显得稍微落后。虽然主流关系数据库纷纷在其新版本中加入了对JSON数据类型的支持(Oracle 12c、SqlServer 2016、MySql 5.7),但对于很多使用了早期数据库版本的项目和产品,对JSON的处理只能另辟蹊径。
本文将介绍PL/SQL(Oracle的SQL扩展语言)中对JSON处理的开源库PLJSON。虽然本文主要部分成文于2016年,总结了笔者2014年初识PLJSON的经验,看起来并不够“新”,但文中对学习JSON处理库的关键点的提取可供读者在学习任何一种JSON处理库时借鉴。

2 资料下载地址

以下是本文中涉及的各资源、源码的下载地址:

  1. pljson_V1.04官方资料(含源码):
    http://download.youkuaiyun.com/detail/free1985/9811278
  2. 修改后的pljsonv1.04的printer源码:
    http://download.youkuaiyun.com/detail/free1985/9812719
  3. 本文全部示例代码:
    http://download.youkuaiyun.com/detail/free1985/9812807

3 概述

PLJSON是Oracle存储过程中对JSON对象进行操作的开源库,最新版本1.0.6(截至2016年6月29日)。本文中所使用示例均基于版本1.0.4,该版本已在笔者实际项目中运行超过3年,稳定性得到充分验证。作为工具库,PLJSON具有以下特点:

  1. 基于PL/SQL实现,开源。读者可以根据自己的实际需要通过修改部分源码对该库进行定制;
  2. http://www.json.org/在PL/SQL语言下唯一推荐的JSON工具库;
  3. 功能全面,API设计优良。作者将PL/SQL语言提供的各种特性使用得淋漓尽致;
  4. 项目开发者比较活跃。截止2016年6月29日代码最后提交时间为2016年4月25日;
  5. 兼容Oracle10g、11g等Oracle主要版本;

4 获取与安装

PLJSON的代码托管于GitHub,项目地址为https://github.com/pljson/pljson。也可以从第二节中的资源链接下载代码。
下载后将得到pljson-master.zip压缩包,解压后将得到如图4-1的文件目录。

pljson-master目录树
图4-1 pljson-master目录树

在PL/SQL Developer中运行install.sql脚本将完成安装,运行uninstall.sql脚本将完成卸载。examples和testsuite文件夹里是一些样例和测试用例,可供参考。
安装过程将会在PL/SQL Developer的命令窗口输出日志。图4-2是安装完全成功输出的日志信息。

安装完全成功输出的日志信息
图4-2 安装完全成功输出的日志信息

安装成功后,将会创建如图4-3所示的包和类型。
创建的包和类型
图4-3 PLJSON创建的包和类型

5 库的使用

5.1 基本类型
PLJSON主要包括JSON、JSON_LIST、JSON_VALUE等三种类型。这三种基本类型的用途及与JSON格式的对应关系如表5-1所示。

表5-1 PLJSON基本类型用途及与JSON格式的对应关系
PLJSON基本类型用途及与JSON格式的对应关系

5.2 类型转换
JSON、JSON_LIST、JSON_VALUE间可以进行类型转换。三者间的转换关系及转换函数如图5-1所示。

JSON、JSON_LIST、JSON_VALUE的转换关系及转换函数
图5-1 JSON、JSON_LIST、JSON_VALUE的转换关系及转换函数

下面的代码演示了JSON、JSON_LIST、JSON_VALUE三种类型的转换方法。

--类型转换
procedure EG_Convert is
    --json对象
    aJsonObj json;
    --json数组
    aJsonArray json_list;
    --json值
    aJsonValue json_value;
  begin
    aJsonObj := json('{"key1":"1","key2":"2"}');
    --json转json_list
    aJsonArray := aJsonObj.get_values;
    --输出["1","2"]
    aJsonArray.print;
    --json转json_value
    aJsonValue := aJsonObj.to_json_value;

    aJsonArray := json_list('[{"key1":"1","key2":"2"},{"key1":"a","key2":"b"}]');
    --json_list转json_value
    aJsonValue := aJsonArray.to_json_value;
    aJsonValue.print;
    --json_value转另两种类型的示例见“对象构造示例”        
  end;

(未完待续)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值