Oracle和JSON的结合
Posted bisal(Chen Liu)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle和JSON的结合相关的知识,希望对你有一定的参考价值。
很多人对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 - 增量统计SQL的需求 - 开窗函数的方案》
近期的热文:
文章分类和索引:
以上是关于Oracle和JSON的结合的主要内容,如果未能解决你的问题,请参考以下文章