首页 > 其他分享 >KingbaseES Json 系列十:Json数组构造函数

KingbaseES Json 系列十:Json数组构造函数

时间:2023-02-23 19:57:01浏览次数:42  
标签:JSON json Json 数组 array NULL KingbaseES ARRAY 构造函数

KingbaseES Json 系列十--Json数组构造函数(ARRAY_TO_JSON,JSONB_BUILD_ARRAY,JSON_ARRAY,JSON_BUILD_ARRAY)

JSON 数据类型是用来存储 JSON(JavaScript Object Notation)数据的。KingbaseES为存储JSON数据提供了两种类型:JSON和 JSONB。JSON 和 JSONB 几乎接受完全相同的值集合作为输入。

本文将主要介绍Kingbase数据库的Json数组构造函数部分。

准备数据:

CREATE TABLE "public"."jsontable" (
	"id" integer NULL,
	"jsondata" json NULL,
	"jsonvarchar" varchar NULL,
	"jsonarray" json NULL,
	"jsonrecord" json NULL,
	"jsonset" json NULL
);

INSERT INTO "public"."jsontable" ("id","jsondata","jsonvarchar","jsonarray","jsonrecord","jsonset") VALUES
	 (1,'{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','{"f2": {"f3": 1}, "f4": {"f5": 99, "f6": "foo"}}','[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"]','{"a":1,"b":"bcol","c":"cc"}','[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]'),
	 (2,'{"a":[1,2,3,4,5]}','{"a": [1, 2, 3, 4, 5]}','[1,2,3,4,5]','{"a":1,"b":"bcol","c":""}','[{"a":1,"b":"bcol","c":""},{"a":1,"b":"bcol","e":""}]'),
	 (3,'{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}}','{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}','[{"f1":1,"f2":null},2,null,3]','{"a":1,"b":"bcol","d":"dd"}','[{"a":1,"b":"bcol","c":"cc_3_1"},{"a":1,"b":"bcol","c":"cc_3_2"}]');


CREATE TABLE "public"."comtable" (
	"id" integer NULL,
	"name" character varying(10 char) NULL
);

INSERT INTO "public"."comtable" ("id","name") VALUES
	 (1,'a'),
	 (2,'b'),
	 (3,'c');

json函数列表

json函数简介

ARRAY_TO_JSON

功能:

把数组 anyarray 作为json数组返回,一个多维数组会成为一个数组的json数组。如果 pretty_bool 设为真,将会在数组维度之间增加换行符。

用法:

array_to_json(anyarray [, pretty_bool])

示例:


demo=# SELECT array_to_json('{{1,5},{99,100}}'::int[]);
  array_to_json   
------------------
 [[1,5],[99,100]]
(1 行记录)

demo=# SELECT array_to_json('{{1,5},{99,100}}'::int[],true);
 array_to_json 
---------------
 [[1,5],      +
  [99,100]]
(1 行记录)

JSONB_BUILD_ARRAY

功能:

JSON处理函数,将可变参数列表构造成一个可能包含不同数据类型的JSON数组。

用法:

jsonb_build_array( VARIADIC "any")

示例:


demo=# select jsonb_build_array(id,name) from comtable ;
 jsonb_build_array 
-------------------
 [1, "a"]
 [2, "b"]
 [3, "c"]
(3 行记录)

JSON_ARRAY

功能:

JSON处理函数,函数通过SQL或者JSON数据构建一个JSON数组。

用法1:

JSON_ARRAY (
  [ { value_expression [ FORMAT JSON ] } [, ...] ]
  [ { NULL | ABSENT } ON NULL ]
  [ RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ] ] ]
)
value_expression [ FORMAT JSON ] :为构造JSON数据提供数据的输入子句。
{ NULL | ABSENT } ON NULL :指定此函数在value_expression计算结果为 null 时的行为。
RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ]]:指定生成数据的类型。支持以下类型:json、jsonb、bytea和字符串类型(text、char、varchar和nchar),还支持VARCHAR2、BLOB、CLOB类型。

示例1:


demo=# select json_array(id ,name) from comtable ;
 json_array 
------------
 [1, "a"]
 [2, "b"]
 [3, "c"]
(3 行记录)

-- 设置值为null时,处理方式

demo=# insert into comtable values('','');
INSERT 0 1

demo=# select json_array(id ,name null on null) from comtable ;
  json_array  
--------------
 [1, "a"]
 [2, "b"]
 [3, "c"]
 [null, null]
(4 行记录)

demo=# select json_array(id ,name absent on null) from comtable ;
 json_array 
------------
 [1, "a"]
 [2, "b"]
 [3, "c"]
 []
(4 行记录)

用法2:

JSON_ARRAY (
  [ query_expression ]
  [ RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ] ] ]
)
query_expression :提供用于构造JSON数组的的数据的SQL查询。查询只能返回包含要在数组中使用的一个列,不能是多列。
RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ]]:指定生成数据的类型。
                                                      支持以下类型:json、jsonb、bytea和
                                                      字符串类型(text、char、varchar和nchar),
                                                      还支持VARCHAR2、BLOB、CLOB类型。

示例2:


demo=# select json_array(select id from comtable ) from dual ;
 json_array 
------------
 [1, 2, 3]
(1 行记录)

demo=# select json_array(select id from comtable returning text) from dual ;
 json_array 
------------
 [1, 2, 3]
(1 行记录)

JSON_BUILD_ARRAY

功能:

JSON处理函数,将可变参数列表构造成一个可能包含不同数据类型的JSON数组。

用法:

json_build_array( VARIADIC "any")

示例:

参照JSONB_BUILD_ARRAY使用示例

标签:JSON,json,Json,数组,array,NULL,KingbaseES,ARRAY,构造函数
From: https://www.cnblogs.com/kingbase/p/17140092.html

相关文章