ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB JSON_SERIALIZE函数

YashanDB JSON_SERIALIZE函数

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-06-09 18:53:18 0 删除 编辑

JSON_SERIALIZE 函数将二进制 json数据按照pretty格式或compact格式序列化为字符串,且序列化后的字符串长度不超过  returning_clause 定义的限制值。

json_value 为一个二进制json数据,可通过 JSON函数获取,当其值为NULL时,函数返回NULL。

JSON_SERIALIZE 函数存在别名,为  JSON_FORMAT,其功能与  JSON_SERIALIZE 完全相同。

returning_clause

该子句用于限制输出字符串的长度,可省略,则系统默认输出字符串的长度为32000。

size为一个整形常量,取值范围为[0,32000]。

当实际字符串长度超过size限制值时,函数返回错误。

PRETTY

PRETTY用于指定字符串的打印规则为pretty,不指定PRETTY时,系统默认按compact规则打印字符串。

compact即紧凑型打印规格,此规则在打印字符串时将去掉所有的规格化空格与换行。

pretty规则具体为:

1.对于JSON Array类型的数据:

  • Number、String、Bool、Null类型的数组元素出现在单独的行上。
  • Object或者Array类型的数组元素占多行。
  • [和 ]各占一行,位于同一个级别,所有数组元素位于同一级别,与 [和 ]相比,缩进了一个额外的级别,每一级别缩进为两个空格。
  • 在两个数组元素的换行符前,会添加一个逗号来分割数组元素。
  • 空数组仍然需要换行。

2.对于JSON Object类型的数据:

  • 如果对象成员中的Value是Number、String、Bool、Null类型,key和value打印在同一行。
  • 如果对象成员中的Value是Object、Array类型,key和value不在同一行输出。
  • {和 }各占一行,位于同一个级别,所有对象成员位于同一级别,与 {和 }相比,缩进了一个额外的级别,每一级别缩进为两个空格。
  • 对象成员的key和value之间用"空格 冒号 空格"分割;
  • 在两个对象成员的换行符前,会添加一个逗号来分割对象成员。
  • 空对象仍然需要换行。

3.对于JSON String类型的数据:

  • 无论是Object中的key还是String类型的标量值,打印时都会在前后使用双引号。
  • 字符串本身中的'\b (backspace)'、'\f (form feed)'、'\n (newline, line feed)'、'\r (carriage return)'、'\t (tab, horizontal tab)'、'Double quotation mark (")'、'slash (/)'、'backslash (\)'需要被转义打印;

4.对于JSON Number类型的数据:

  • number的指数大于等于0时,如果展开打印后的宽度大于40,则使用科学计数法打印,否则展开打印。例如:

    • 1e39打印结果为:1000000000000000000000000000000000000000
    • 1e40打印结果为:1E+40
  • number的指数小于0时,如果展开打印后的小数部分(去掉小数部分后面的0)的宽度大于40,则使用科学计数法打印,否则展开打印。例如:

    • 12300e-43打印结果为:1.23E-39(展开打印结果为0.00000000000000000000000000000000000000123,小数点后面41位,故使用科学计数法打印)
    • 12300e-42打印结果为:0.0000000000000000000000000000000000000123(小数点后面正好40位)

EXTENDED

EXTENDED关键字用于设置使用扩展模式输出JSON数据,详见 JSON扩展格式输出。

示例

SELECT JSON_SERIALIZE(JSON('{"keyC":123, "keyabc":false, "keyA":234, "keyB":345, "key":true}') PRETTY) res FROM DUAL;RES                                             
---------------------------------------------------------------- {  "key" : true,
  "keyA" : 234,
  "keyB" : 345,
  "keyC" : 123,
  "keyabc" : false}SELECT JSON_SERIALIZE(JSON('{"keyC":123, "keyabc":false, "keyA":234, "keyB":345, "key":true}')) res FROM DUAL;RES----------------------------------------------------------------{"key":true,"keyA":234,"keyB":345,"keyC":123,"keyabc":false}SELECT JSON_SERIALIZE(JSON('{"keyC":123, "keyabc":false, "keyA":234, "keyB":345, "key":true}') RETURNING VARCHAR(10) PRETTY) res FROM DUAL;YAS-00215 length of concat texts exceeds the buffer limit-- JSON扩展模式的输入输出SELECT JSON_SERIALIZE(JSON('{"$binary": "SGVsbG8gd29ybGQh"}' EXTENDED)) res FROM DUAL ;RES----------------------------------------------------------------"48656C6C6F20776F726C6421"SELECT JSON_SERIALIZE(JSON('{"$binary": "SGVsbG8gd29ybGQh"}' EXTENDED) EXTENDED) res FROM DUAL ;RES----------------------------------------------------------------{"$binary": "SGVsbG8gd29ybGQh"}-- JSON扩展模式输出同样受到PRETTY关键字影响SELECT JSON_SERIALIZE(JSON('{"$binary": "SGVsbG8gd29ybGQh"}' EXTENDED) PRETTY EXTENDED) res FROM DUAL ;RES----------------------------------------------------------------{  "$binary": "SGVsbG8gd29ybGQh"}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3087129/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: YashanDB RIGHT函数
请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639746