SQL函数 JSON_OBJECT

2022-04-06 16:29:01 浏览数 (1)

SQL函数 JSON_OBJECT

将数据作为JSON对象返回的转换函数。

大纲

代码语言:javascript复制
JSON_OBJECT(key:value [,key:value][,...] [NULL ON NULL | ABSENT ON NULL])

参数

  • key:value - 键:值对或逗号分隔的键:值对列表。键是由单引号分隔的用户指定的文字字符串。值可以是列名、聚合函数、算术表达式、数字或字符串文字或文字NULL
  • ABSENT ON NULL NULL ON NULL - 可选-指定如何在返回的JSON对象中表示空值的关键字短语。NULL ON NULL(缺省值)表示带有单词NULL(未引号)的NULL(缺少)数据。在NULL上缺失将从JSON对象中省略NULL数据;当valueNULL且不保留占位符逗号时,它将删除key:value对。此关键字短语对空字符串值没有影响。

描述

JSON_OBJECT接受逗号分隔的键:值对列表(例如,‘MyKey’:colname),并返回包含这些值的JSON对象。可以指定任何单引号字符串作为键名;JSON_OBJECT不强制任何命名约定或对键名进行唯一性检查。可以为值指定列名或其他表达式。

JSON_OBJECT可以在SELECT语句中与其他类型的SELECT-Items结合使用。可以在可以使用SQL函数的其他位置指定JSON_OBJECT,例如在WHERE子句中。

返回的JSON对象格式如下:

代码语言:javascript复制
{ "key1" : "value1" , "key2" : "value2" , "key3" : "value3" }

Json_object以字符串(用双引号括起来)或数字形式返回对象值。数字以规范格式返回。数字字符串以文字形式返回,用双引号括起来。所有其他数据类型(例如,DATE$LIST)都以字符串形式返回,当前的%SelectMode决定返回值的格式。Json_object以显示或ODBC模式返回键和值值(如果这是查询的选择模式)。

JSON_OBJECT不支持将星号(*)语法作为指定表中所有字段的方式。

返回的JSON对象列被标记为表达式(默认情况下);可以为JSON_OBJECT指定列别名。

选择模式和排序

当前%SelectMode属性确定返回的JSON对象值的格式。通过更改选择模式,所有日期和%LIST值都会以该选择模式格式的字符串形式包含在JSON对象中。可以通过将格式转换函数(%EXTERNAL%INTERNAL%ODBCIN%ODBCOUT)应用于JSON_OBJECT中的各个字段名来覆盖当前的选择模式。将格式转换函数应用于JSON_OBJECT没有任何效果,因为JSON对象的键:值对是字符串。

默认排序规则确定返回的JSON对象值的排序规则。可以将排序函数应用于JSON_OBJECT,同时转换键和值。通常,不应该对JSON_OBJECT应用排序函数,因为键区分大小写。在JSON对象格式化之后应用排序规则。因此,%SQLUPPER(JSON_OBJECT(‘K1’:F1,‘K2’:F2))将所有JSON对象键和值字符串转换为大写。%SQLUPPER在JSON对象之前插入一个空格,而不是在对象内的值之前。

JSON_OBJECT中,可以将排序函数应用于键:值对的值部分。由于%SQLUPPER会在值之前插入一个空格,因此通常最好指定大小写转换函数,如LCASEUCASE

ABSENT ON NULL

如果指定可选的ACESING ON NULL关键字短语,则JSON对象中不包括NULL(或NULL文字)列值。JSON对象中不包括占位符。这可能会导致JSON对象具有不同数量的键:值对。例如,下面的程序返回JSON对象,其中对于某些记录,第三个键:值对是Age,对于其他记录,第三个键:值对是FavoriteColors

代码语言:javascript复制
SELECT JSON_OBJECT('id':%ID,'name':Name,'colors':FavoriteColors,'years':Age ABSENT ON NULL) FROM Sample.Person

如果未指定关键字短语,则NULL的默认值为NULL:NULL由单词NULL(未用引号分隔)表示,作为key:value对的值。因此,JSON_OBJECT函数返回的所有JSON对象将具有相同数量的键:值对。

0 人点赞