KingbaseES Json 系列二--Json对象函数(JSONB_BUILD_OBJECT,JSONB_OBJECT,JSON_BUILD_OBJECT,JSON_OBJECT)
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
);
INSERT INTO public.jsontable ("id","jsondata","jsonvarchar","jsonarray") 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"]'),
(2,'{"a":[1,2,3,4,5]}','{"a": [1, 2, 3, 4, 5]}','[1,2,3,4,5]'),
(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]');
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函数简介
JSONB_BUILD_OBJECT
功能:
JSON处理函数,将可变参数列表构造成一个JSON 对象,通过转换,该参数列表由交替出现的键和值构成。
注意:参数列表的元素个数必须为偶数
用法:
jsonb_build_object( VARIADIC "any")
示例:
demo=# select JSONB_BUILD_OBJECT(id , name) from comtable ;
JSONB_BUILD_OBJECT
--------------------
{"1": "a"}
{"2": "b"}
{"3": "c"}
(3 行记录)
-- 元素个数必须为偶数
demo=# select JSONB_BUILD_OBJECT(id) from comtable ;
错误: 参数列表的元素个数必须为偶数
提示: jsonb_build_object()的参数必须包含可替代的键和对应的值.
JSONB_OBJECT
功能:
JSON处理函数,从文本数组中构造JSON对象。
用法1:
jsonb_object(text[])
text数组必须包含偶数个元素
函数必须可以使具有偶数个成员的一维数组(成员被当做交替出现的键值对),或者是一个二维数组(每一个内部数组刚好有两个元素,可以被看做键值对)。
示例1:
demo=# SELECT jsonb_object(array[id::text ,name::text]) from comtable ;
jsonb_object
--------------
{"1": "a"}
{"2": "b"}
{"3": "c"}
(3 行记录)
-- 数组必须包含偶数个元素
demo=# SELECT jsonb_object(array[id::text]) from comtable ;
错误: 数组必须包含偶数个元素
demo=# SELECT jsonb_object('{a, b, "def", c, 3.5}');
错误: 数组必须包含偶数个元素
用法2:
jsonb_object( keys text[], values text[])
keys数组和values数组维数需要一致
从两个独立的数组得到键/值对。在其他方面和一个参数的形式相同。
示例2:
demo=# SELECT jsonb_object(array[id],array[name]) from comtable ;
jsonb_object
--------------
{"1": "a"}
{"2": "b"}
{"3": "c"}
(3 行记录)
-- keys和values数组维数需要一致
demo=# SELECT jsonb_object(array[id ,id],array[name]) from comtable ;
错误: 不匹配的数组维数
demo=# SELECT jsonb_object('{a,b}', '{1,2,3}');
错误: 不匹配的数组维数
JSON_BUILD_OBJECT
功能:
JSON处理函数,将可变参数列表构造成一个JSON 对象,通过转换,该参数列表由交替出现的键和值构成。
注意:参数列表的元素个数必须为偶数
用法:
json_build_object( VARIADIC "any")
示例:
参照JSONB_BUILD_OBJECT使用示例
JSON_OBJECT
功能:
JSON处理函数,从文本数组中构造JSON对象。
用法:
json_object(text[])
json_object( keys text[], values text[])
示例:
参照JSONB_OBJECT使用示例