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登录提示信息

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

国产数据库名录一览

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

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

近期的热文:

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

文章分类和索引:

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

以上是关于Oracle和JSON的结合的主要内容,如果未能解决你的问题,请参考以下文章

Oracle和JSON的结合

使用PHP获取JSON属性名称,后跟项目名称值

json从入门到精通(全)

jquery 对 Json 的各种遍历

oracle——用户

Oracle优化笔记