PLJSON开源库介绍(一)

    xiaoxiao2021-04-12  78

    本文来自李明子csdn博客(http://blog.csdn.net/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 资料下载地址

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

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

    3 概述

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

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

    4 获取与安装

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

    图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格式的对应关系

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

    图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;

    (未完待续)

    转载请注明原文地址: https://ju.6miu.com/read-667558.html

    最新回复(0)