ITPub博客

首页 > 数据库 > 数据库开发技术 > Oracle和JSON的结合

Oracle和JSON的结合

原创 数据库开发技术 作者:bisal 时间:2022-06-30 07:50:00 0 删除 编辑

很多人对JSON不陌生,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,他基于ECMAScript(European Computer Manufacturers Association,欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


简而言之,JSON是一种存储和交换数据的语法。JSON本质就是字符串,JSON数据是在语言里面使用的,无论是Java、C#,还是js,都可以使用JSON。

 

JSON就是一组键值对的数据对象,在JavaScript里面就是JavaScript的对象,在Java中就是Java的JSON对象(类/VO)。JSON数据写为名称/值对,名称/值由字段名称构成,后跟冒号和值,一般的格式,如下所示,

name={name01:“test1”,name02={ name02:“test2”,name021:“test3”} }


在JSON中,值必须是以下数据类型之一,

  • 字符串

  • 数字

  • 对象(JSON对象)

  • 数组

  • 布尔

  • Null


JSON的值不可以是以下数据类型之一,

  • 函数

  • 日期

  • undefined


有开发经验的朋友可能以前用过XML作为数据传输的格式,如下就是一个XML数据格式的例子,


这是用JSON展示相同数据的例子,


可以看到,JSON简单的语法格式和清晰的层次结构明显要比XML容易阅读,并且在数据交换方面,由于JSON所使用的字符要比XML少得多,可以大大得节约传输数据所占用的带宽,传输效率上,会高于XML。


Oracle从12c开始就支持JSON的存储和检索,每个版本中都对相关的功能有所增强,例如一些JSON的限制,允许的长度等特性就会有改进,例如12c的描述中,JSON search index支持64字节,

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/oracle-json-restrictions.html#GUID-1DB81125-54A7-4CB6-864B-78E0E7E407C9


19c的描述中,JSON search index已经能支持255字节,

https://docs.oracle.com/en/database/oracle/oracle-database/19/adjsn/oracle-json-restrictions.html#GUID-1DB81125-54A7-4CB6-864B-78E0E7E407C9


所以当我们使用这些特性的时候,需要关注不同版本的支持差别。


Oracle中我们可以用json_object()函数来将检索结果转成JSON,如下所示,


还可以自定义key,


可以将检索结果存储为列表,


还支持做排序,


只使用json_object(),每条记录是单独的一个json,如果要将所有的记录生成一个json,可以结合json_arrayagg一起用,如下所示,


但很可能出现这个错误,返回记录数据多,提示最大值4000,


这是因为json_arrayagg()返回的类型有两种,varchar2和clob,如果不显式指定,用的就是varchar2,如果超过限度,可以改用clob类型,就会输出更多的内容,

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/JSON_ARRAYAGG.html#GUID-6D56077D-78DE-4CC0-9498-225DDC42E054


增加returning clob子句,就可以显示了,


和JSON相关的函数还有很多,有需要可以了解,


对于一些基本的JSON操作需求,Oracle还是可以满足的,这就避免了通过程序或者SQL拼接JSON的操作,从便利性上,有一定的帮助。


参考资料,

https://baike.baidu.com/item/JSON/2462549?fr=aladdin

https://blog.csdn.net/weixin_44600235/article/details/107630279



近期更新的文章:

《脚本中如何"优雅"避免MySQL登录提示信息》

《小白学习MySQL - 增量统计SQL的需求 - 开窗函数的方案》

《国产数据库名录一览》

《小白学习MySQL - 统计的"投机取巧"》

《小白学习MySQL - 增量统计SQL的需求》


近期的热文:

《"红警"游戏开源代码带给我们的震撼》


文章分类和索引:

《公众号1000篇文章分类和索引》

原文作者:bisal的个人杂货铺;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
Oracle ACE,10g/11g OCP,11g OCM,国内首批Oracle YEP成员(Oracle Young Expert Program,Oracle用户组年轻专家项目),EXIN DevOps Master,Oracle爱好者,微信公众号:bisal的个人杂货铺

注册时间:2022-06-21

  • 博文量
    539
  • 访问量
    2801339