文章目录

  • 第六十九章 SQL函数 JSON_OBJECT
  • 大纲
  • 参数
  • 描述
  • 选择模式和排序
  • ABSENT ON NULL
  • 示例

第六十九章 SQL函数 JSON_OBJECT

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

大纲

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对象格式如下:

{ "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

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对象将具有相同数量的键:值对。

示例

下面的动态SQL示例应用JSON_OBJECT来格式化包含字段值的JSON对象:

/// d ##class(PHA.TEST.SQLCommand).JsonObject()
ClassMethod JsonObject()
{s myquery = 2s myquery(1) = "SELECT TOP 3 JSON_OBJECT('id':%ID,'name':Name,'birth':DOB,"s myquery(2) = "'age':Age,'state':Home_State) FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New()s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()while rset.%Next() {DO rset.%Print(" ^ ")}w !,"Total row count=",rset.%ROWCOUNT
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).JsonObject()
{"id":1,"name":"yaoxin","birth":54536,"age":31,"state":"WI"}
{"id":2,"name":"xiaoli","birth":null,"age":null,"state":null}
{"id":6,"name":"姚鑫","birth":63189,"age":8,"state":null}Total row count=3

下面的动态SQL示例应用JSON_OBJECT来格式化包含文字和字段值的JSON对象:

/// d ##class(PHA.TEST.SQLCommand).JsonObject1()
ClassMethod JsonObject1()
{s myquery = 2s myquery(1) = "SELECT TOP 3 JSON_OBJECT('lit':'Employee from','t':%TABLENAME,"s myquery(2) = "'name':Name,'num':SSN) FROM Sample.Employee"s tStatement = ##class(%SQL.Statement).%New()s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()while rset.%Next() {DO rset.%Print(" ^ ")}w !,"Total row count=",rset.%ROWCOUNT
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).JsonObject1()
{"lit":"Employee from","t":"Sample.Employee","name":"xiaoli","num":"111-11-1111"}
{"lit":"Employee from","t":"Sample.Employee","name":"Chadwick,Phyllis L.","num":"852-26-8969"}
{"lit":"Employee from","t":"Sample.Employee","name":"Schaefer,Usha G.","num":"488-63-3164"}Total row count=3

下面的动态SQL示例应用JSON_OBJECT来格式化包含空值和字段值的JSON对象:

/// d ##class(PHA.TEST.SQLCommand).JsonObject2()
ClassMethod JsonObject2()
{s myquery = 2s myquery(1) = "SELECT JSON_OBJECT('name':Name,'colors':FavoriteColors) FROM Sample.Person"s myquery(2) = " WHERE Name %STARTSWITH 'S'"s tStatement = ##class(%SQL.Statement).%New()s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()while rset.%Next() {DO rset.%Print(" ^ ")}w !,"Total row count=",rset.%ROWCOUNT
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).JsonObject2()
{"name":"Smith,Kyra P.","colors":"\b\u0001Yellow"}
{"name":"Smith,Elvis Y.","colors":"\b\u0001Orange\b\u0001Orange"}
{"name":"Solomon,Emily D.","colors":null}
{"name":"Schaefer,Usha G.","colors":"\b\u0001Orange\u0007\u0001White"}
{"name":"Sorenson,Samantha X.","colors":"\u0007\u0001White\b\u0001Orange"}
{"name":"Schaefer,Jocelyn V.","colors":"\b\u0001Yellow"}Total row count=6

下面的动态SQL示例设置ODBC %SelectMode,它确定如何表示所有字段,包括JSON对象值。该查询通过应用%EXTERNAL FORMAT-CONFORMAT函数覆盖特定JSON_OBJECT值的此选择模式:

/// d ##class(PHA.TEST.SQLCommand).JsonObject3()
ClassMethod JsonObject3()
{s myquery = 3s myquery(1) = "SELECT TOP 8 JSON_OBJECT('ODBCBday':DOB,'DispBday':%EXTERNAL(DOB)),"s myquery(2) = "JSON_OBJECT('ODBCcolors':FavoriteColors,'DispColors':%EXTERNAL(FavoriteColors)) "s myquery(3) = "FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New()s tStatement.%SelectMode=1w "SelectMode is ODBC",!s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()if rset.%SQLCODE=0 { w !,"Executed query",! }else { s badSQL=##class(%Exception.SQL).%New(,rset.%SQLCODE,,rset.%Message)}d rset.%Display()w !,"End of data"
}
DHC-APP> d ##class(PHA.TEST.SQLCommand).JsonObject3()
SelectMode is ODBCExecuted query
Expression_1    Expression_2
{"ODBCBday":"1990-04-25","DispBday":"04/25/1990"}       {"ODBCcolors":"Red,Orange,Yellow","DispColors":"Red\r\nOrange\r\nYellow"}
{"ODBCBday":null,"DispBday":null}       {"ODBCcolors":null,"DispColors":null}
{"ODBCBday":"2014-01-02","DispBday":"01/02/2014"}       {"ODBCcolors":null,"DispColors":null}
{"ODBCBday":"2014-01-02","DispBday":"01/02/2014"}       {"ODBCcolors":null,"DispColors":null}
{"ODBCBday":"1978-01-28","DispBday":"01/28/1978"}       {"ODBCcolors":null,"DispColors":null}
{"ODBCBday":null,"DispBday":null}       {"ODBCcolors":"Red,Orange,Yellow,Green","DispColors":"Red\r\nOrange\r\nYellow\r\nGreen"}
{"ODBCBday":null,"DispBday":null}       {"ODBCcolors":"Red,Orange,Yellow,Green,Green","DispColors":"Red\r\nOrange\r\nYellow\r\nGreen\r\nGreen"}
{"ODBCBday":null,"DispBday":null}       {"ODBCcolors":"Red,Orange,Yellow,Green,Yellow","DispColors":"Red\r\nOrange\r\nYellow\r\nGreen\r\nYellow"}8 Rows(s) Affected
End of data

下面的动态SQL示例应用JSON_OBJECT来格式化包含联接表中的字段值的JSON对象:

/// d ##class(PHA.TEST.SQLCommand).JsonObject4()
ClassMethod JsonObject4()
{s myquery = 2s myquery(1) = "SELECT TOP 3 JSON_OBJECT('e.t':E.%TABLENAME,'e.name':E.Name,'c.t':C.%TABLENAME,"s myquery(2) = "'c.name':C.Name) FROM Sample.Employee AS E,Sample.Company AS C"s tStatement = ##class(%SQL.Statement).%New()s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()while rset.%Next() {d rset.%Print(" ^ ")}w !,"Total row count=",rset.%ROWCOUNT
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).JsonObject4()
{"e.t":"Sample.Employee","e.name":"Adams,Susan E.","c.t":"Sample.Company","c.name":"MacroComp Media Inc."}
{"e.t":"Sample.Employee","e.name":"Alton,Phil T.","c.t":"Sample.Company","c.name":"MacroComp Media Inc."}
{"e.t":"Sample.Employee","e.name":"Anderson,Valery N.","c.t":"Sample.Company","c.name":"MacroComp Media Inc."}Total row count=3

下面的动态SQL示例在WHERE子句中使用JSON_OBJECT在不使用OR语法的情况下对多列执行CONTAINS测试:

/// d ##class(PHA.TEST.SQLCommand).JsonObject5()
ClassMethod JsonObject5()
{s myquery = 2s myquery(1) = "SELECT Name,Home_City,Home_State FROM Sample.Person"s myquery(2) = " WHERE JSON_OBJECT('name':Name,'city':Home_City,'state':Home_State) [ 'X'"s tStatement = ##class(%SQL.Statement).%New()s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()while rset.%Next() {d rset.%Print(" ^ ")}w !,"Total row count=",rset.%ROWCOUNT
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).JsonObject5()
Zevon,Heloisa O. ^ Xavier ^ MI
Bukowski,Mario V. ^ Xavier ^ TX
Pascal,Kim P. ^ Xavier ^ OR
Xerxes,Angelo P. ^ Youngstown ^ AL
Bachman,Susan O. ^ Chicago ^ TX
Russell,Joe M. ^ Xavier ^ VA
Ingrahm,Molly X. ^ Chicago ^ ND
Xavier,Dmitry B. ^ Miami ^ PA
Martinez,Terry T. ^ Xavier ^ CO
Ahmed,Elmo X. ^ Oak Creek ^ AZ
Basile,Filomena X. ^ Denver ^ NJ
Frost,Xavier D. ^ Miami ^ MO
Gore,Fred X. ^ Denver ^ TN
Lepon,Kevin N. ^ Newton ^ TX
Chadwick,Phyllis L. ^ Xavier ^ SC

第六十九章 SQL函数 JSON_OBJECT相关推荐

  1. 第六十九章 Caché 函数大全 $WCHAR 函数

    文章目录 第六十九章 Caché 函数大全 $WCHAR 函数 大纲 参数 描述 第六十九章 Caché 函数大全 $WCHAR 函数 返回与识别代理项对的数字代码对应的字符. 大纲 $WCHAR(e ...

  2. 第二十九章 SQL函数 COALESCE

    文章目录 第二十九章 SQL函数 COALESCE 大纲 描述 返回值的数据类型 比较NULL处理函数 示例 第二十九章 SQL函数 COALESCE 返回第一个非空表达式的值的函数. 大纲 COAL ...

  3. 第六十二章 SQL函数 HOUR

    文章目录 第六十二章 SQL函数 HOUR 大纲 描述 示例 第六十二章 SQL函数 HOUR Time函数,它返回DateTime表达式的小时数. 大纲 {fn HOUR(time-expressi ...

  4. 第六十四章 SQL函数 INSTR

    文章目录 第六十四章 SQL函数 INSTR 大纲 参数 描述 INSTR, CHARINDEX, POSITION和$FIND 示例 第六十四章 SQL函数 INSTR 返回子字符串在字符串中的位置 ...

  5. 第二十九章 SQL命令 DISTINCT

    文章目录 第二十九章 SQL命令 DISTINCT 大纲 参数 描述 DISTINCT和ORDER BY DISTINCT和GROUP BY 字母大小写与DISTINCT优化 DISTINCT的其他用 ...

  6. 第十九章 SQL谓词 %STARTSWITH(一)

    第十九章 SQL谓词 %STARTSWITH(一) 用指定初始字符的子字符串匹配值. 大纲 scalar-expression %STARTSWITH substring 参数 scalar-expr ...

  7. 第二十四章 SQL函数 CEILING

    文章目录 第二十四章 SQL函数 CEILING 大纲 参数 描述 示例 第二十四章 SQL函数 CEILING 数值函数,返回大于或等于给定数值表达式的最小整数. 大纲 CEILING(numeri ...

  8. 第九十五章 SQL函数 MINUTE

    文章目录 第九十五章 SQL函数 MINUTE 大纲 参数 描述 示例 第九十五章 SQL函数 MINUTE 返回日期时间表达式的分钟的时间函数. 大纲 {fn MINUTE(time-express ...

  9. 第九十四章 SQL函数 %MINUS

    文章目录 第九十四章 SQL函数 %MINUS 大纲 参数 描述 示例 第九十四章 SQL函数 %MINUS 将数字转换为规范整理格式,然后反转符号的整理函数. 大纲 %MINUS(expressio ...

最新文章

  1. 1.5亿美元!英国AI芯片创企今宣布获新融资,估值近20亿美元
  2. 好消息,关于2005的default provider
  3. HDMIARC是什么
  4. PHP源代码后门事件后续:用户数据库遭泄露或是元凶
  5. java海康摄像头添加人脸_java及opencv实现调用本地摄像头、网络摄像头完成人脸检测、人脸收集、人脸识别、性别识别...
  6. 阿里高效沟通的秘密:向上沟通,跨部门沟通,PREP汇报...这5招绝了!
  7. MATLAB马赛克图像处理
  8. 降维算法(PCA/LDA/LLE/LEP/FA)总结
  9. ASP:KU论坛跳转页面
  10. 高通华裔工程师跳楼自杀!中年IT男,为何这么难?
  11. python太极代码_Python turtle绘制阴阳太极图代码解析
  12. NUMA与英特尔Xeon处理器学习心得 转
  13. mysql之DDL操作
  14. 图像处理:梯度与反色
  15. 计算机宣传部职责,计算机系团总支宣传部第一学期工作总结
  16. 懒人HTML5笔记-1
  17. 微信小程序开发 [00] 写在前面的话,疯狂唠唠
  18. PIC16F877A单片机 (IIC总线+PCF8563芯片)
  19. STM32 TM1637驱动数码管 IIC通信
  20. Pico四通道汽车诊断示波器柴油车套装(型号:PQ179)

热门文章

  1. 重置Google云服务器密码
  2. c++继承(输出ASCII字符与所对应的数字的对照表)
  3. ReplicaSet和Deployment
  4. Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
  5. java浮点数取余数
  6. CodeForces - 31D Chocolate【几何】【连通块】
  7. 文本编码格式转换及文本内容类型的介绍
  8. Vivado 工程文件的结构
  9. 机器学习实战(一):k-近邻算法
  10. Auto.js 一个同一张图片多次多点找色的例子ColorMapping.findMultiColors