KingbaseES Json 系列十一--Json数组操作函数(JSONB_ARRAY_ELEMENTS,JSONB_ARRAY_ELEMENTS_TEXT,JSONB_ARRAY_LENGTH,JSON_ARRAY_ELEMENTS,JSON_ARRAY_ELEMENTS_TEXT,JSON_ARRAY_LENGTH,JSON_ARRAYAGG)

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函数简介

JSONB_ARRAY_ELEMENTS

功能:

JSON处理函数,将传入值包括空值聚集成一个JSON数组。

用法:

jsonb_array_elements(jsonb)

示例:


demo=# select jsonb_array_elements('{"a": [1, 2, 3, 4, 5]}') ;
错误: 无法从一个对象里提取元素 demo=# select jsonb_array_elements(' [{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]');
jsonb_array_elements
----------------------------------
{"a": 1, "b": "bcol", "c": "cc"}
{"a": 1, "b": "bcol", "d": ""}
(2 行记录)

JSONB_ARRAY_ELEMENTS_TEXT

功能:

JSON处理函数,把一个JSON数组扩展成 text 值集合。

用法:

jsonb_array_elements_text(jsonb)

示例:


demo=# select jsonb_array_elements_text('{"a": [1, 2, 3, 4, 5]}') ;
错误: 无法从一个对象里提取元素 demo=# select jsonb_array_elements_text(' [{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]');
jsonb_array_elements_text
----------------------------------
{"a": 1, "b": "bcol", "c": "cc"}
{"a": 1, "b": "bcol", "d": ""}
(2 行记录) demo=# select jsonb_array_elements_text(jsonarray) from jsontable ;
jsonb_array_elements_text
----------------------------
1
true
[1, [2, 3]] {"f1": 1, "f2": [7, 8, 9]}
false
stringy
1
2
3
4
5
{"f1": 1, "f2": null}
2 3
(16 行记录)

JSONB_ARRAY_LENGTH

功能:

JSON处理函数,返回最外层JSON数组中的元素数量。

用法:

jsonb_array_length(jsonb)

示例:


demo=# select jsonb_array_length('{"a": [1, 2, 3, 4, 5]}');
错误: 无法从一个非数组里得到数组的长度 demo=# select jsonb_array_length(' [{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]');
jsonb_array_length
--------------------
2
(1 行记录)

JSON_ARRAY_ELEMENTS

功能:

JSON处理函数,将传入值包括空值聚集成一个JSON数组。

用法:

json_array_elements(json)

示例:

参照JSONB_ARRAY_ELEMENTS使用示例

JSON_ARRAY_ELEMENTS_TEXT

功能:

JSON处理函数,把一个JSON数组扩展成 text 值集合。

用法:

json_array_elements_text(json)

示例:

参照JSONB_ARRAY_ELEMENTS_TEXT使用示例

JSON_ARRAY_LENGTH

功能:

JSON处理函数,返回最外层JSON数组中的元素数量。

用法:

json_array_length(json)

示例:

参照JSONB_ARRAY_LENGTH使用示例

JSON_ARRAYAGG

功能:

JSON处理函数,函数将提供的JSON数据聚合到JSON数组中。

用法:

JSON_ARRAYAGG (
[ value_expression ]
[ ORDER BY sort_expression ]
[ { NULL | ABSENT } ON NULL ]
[ RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ] ] ]
)
value_expression :value_expression是一个表达式,它为JSON值提供其类型的输入。。
ORDER BY sort_expression :输入数据的排序规则。
{ NULL | ABSENT } ON NULL :指定函数在value_expression计算结果为null时的行为。
RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ]]:指定生成数据的类型。支持以下类型:json、jsonb、bytea和字符串类型(text、char、varchar和nchar),还支持VARCHAR2、BLOB、CLOB类型。

示例:


demo=# select json_arrayagg(name) from comtable ;
json_arrayagg
-----------------
["a", "b", "c"]
(1 行记录) demo=# select json_arrayagg(jsonarray) from jsontable ;
json_arrayagg
-------------------------------------------------------------------------------------------------------------
[[1,true,[1,[2,3]],null,{"f1":1,"f2":[7,8,9]},false,"stringy"], [1,2,3,4,5], [{"f1":1,"f2":null},2,null,3]]
(1 行记录) -- ORDER BY数据排序规则 demo=# select json_arrayagg(name order by id desc) from comtable ;
json_arrayagg
-----------------
["c", "b", "a"]
(1 行记录) -- 指定json值为null时的处理 demo=# select json_arrayagg('' null on null);
json_arrayagg
---------------
[null]
(1 行记录) demo=# select json_arrayagg('' absent on null);
json_arrayagg
---------------
[]
(1 行记录)

KingbaseES Json 系列十一:Json数组操作函数的更多相关文章

  1. JavaScript中常见的数组操作函数及用法

    JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...

  2. JavaScript 数组操作函数--转载+格式整理

    JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,conc ...

  3. 初探numpy——广播和数组操作函数

    numpy广播(Broadcast) 若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算 import numpy as np a=np.array( ...

  4. php中数组操作函数

    一.数组操作的基本函数数组的键名和值array_values($arr);  获得数组的值array_keys($arr);  获得数组的键名array_flip($arr);  数组中的值与键名互换 ...

  5. 量化投资_Multicharts数组操作函数_append()追加函数(自定义)

    1. Multicharts中关于数组的操作比较麻烦,而且当中所谓的动态数组的定义并不是像其他语言那种的概念.因此要对数组进行元素“”追加“”的话,需要重新更改数组的索引,然后再最后一个位置添加val ...

  6. js 数组操作函数有:push,pop,join,shift,unshift,slice,splice,concat

    (1)push 和 pop 这两个函数都是对数组从尾部进行压入或弹出操作.push(arg1,arg2,...)可以每次压入一个或多个元素,并返回更新后的数组长度.注意如果参数也是数组的话,则是将全部 ...

  7. 【220】◀▶ IDL 数组操作函数说明

    参考:Array Creation Routines —— 创建数组函数参考:Array Manipulation Routines —— 操作数组函数 01   MAX 最大值. 02   MIN ...

  8. 字符串、数组操作函数 Copy Concat Delete Insert High MidStr Pos SetLength StrPCopy TrimLeft

    对字符串及数组的操作,是每个程序员必须要掌握的.熟练的使用这些函数,在编程时能更加得心应手. 1.Copy 功能说明:该函数用于从字符串中复制指定范围中的字符.该函数有3个参数.第一个参数是数据源(即 ...

  9. 【五】PHP数组操作函数

    1.输出数组的结构:bool print_r(数组); $arr=array('jack','mike','tom'); print_r($arr);//Array ( [0] => jack ...

  10. Javascript数组操作函数总结

    (1) shift  删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4, ...

随机推荐

  1. C++ 快速加载 Dll 里的 API

    最近项目里要重新编写程序加载器,也就是编译出一个可执行文件,在 Windows 上是 .exe 为什么要程序加载器? 个人理解是,可执行文件大小最好是越小越好,功能都可以由 dll 文件执行 而程序加 ...

  2. FART 脱壳机原理分析

    FART是一个基于Android 源码修改的脱壳机 可以脱整体壳和抽取壳 FART脱壳的步骤主要分为三步: 1.内存中DexFile结构体完整dex的dump 2.主动调用类中的每一个方法,并实现对应 ...

  3. MPG线程模型简介

    概述 go语言中的MPG线程模型对两级线程模型进行了一定程度的改进,使它能够更加灵活的进行线程之间的调度. 它由3个主要模块构成,如下图: MPG的3个主要模块以及功能,我们通过下表所示. 模块 功能 ...

  4. 【LeetCode哈希表#5】四数相加II(map)

    四数相加II 力扣题目链接(opens new window) 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + ...

  5. SpringBoot Starter大全

    spring Boot应用启动器基本的一共有44种,具体如下 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring-b ...

  6. 一文讲明白Java中线程与进程、并发与与并行、同步与异步

    写在开头 ok,everybody,在过去的两周内,我们大体上讲完了Java的集合,在最后我们探讨了关于HashMap线程不安全的原因,又提出了ConcurrentHashMap这个线程安全的集合解决 ...

  7. Jmeter 如何连接mysql数据库?

    1 首先安装jmeter jdbc 插件 JDBC驱动包下载教程:https://blog.csdn.net/qq_50896685/article/details/129154801 2 安装好后将 ...

  8. C#与C互操作

    C#给C++传递char**(转载) extern "C" _declspec(dllexport)void GetResult(char* a,char** pBuf) { sp ...

  9. 三: MySQL的数据目录

    # MySQL的数据目录 1. MySQL8的主要目录结构 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径:/var/lib/mysql/ MySQL服务器程序在启动时会到文件系统的某个 ...

  10. Java 多态 案列

    1 package com.bytezreo.duotai; 2 3 //多态性的使用 举例一 4 public class AnimalTest 5 { 6 public static void m ...