KingbaseES Json 系列十二--Json其他函数(JSONB_TYPEOF,JSON_SCALAR,JSON_SERIALIZE,JSON_TYPEOF,JSON_VALUE)

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"}]');

json函数列表

json函数简介

JSONB_TYPEOF

功能:

JSON函数,把最外层的JSON对象类型作为一个文本串返回。可能类型是: object 、 array 、 string 、number 、 boolean 以及 null 。

用法:

jsonb_typeof(json)

示例:


demo=# SELECT jsonb_typeof('true');
jsonb_typeof
--------------
boolean
(1 行记录) demo=# SELECT jsonb_typeof('"string"');
jsonb_typeof
--------------
string
(1 行记录) demo=# select jsonb_typeof('{"a": [1, 2, 3, 4, 5]}') ;
jsonb_typeof
--------------
object
(1 行记录) demo=# select jsonb_typeof('[1, 2, 3, 4, 5]') ;
jsonb_typeof
--------------
array
(1 行记录) demo=# SELECT jsonb_typeof('-123.4');
jsonb_typeof
--------------
number
(1 行记录)

JSON_SCALAR

功能:

JSON函数,使用JSON_SCALAR函数从SQL数据生成JSON标量值。

用法:

json_scalar (
expression
[ RETURNING json_data_type ]
)
expression:用于构造JSON标量值的数据。
[ RETURNING json_data_type ]:函数返回值,可以返回json类型或jsonb类型,默认是jsob类型。

示例:


demo=# SELECT json_scalar('{"a": [1, 2, 3, 4, 5]}') ;
json_scalar
----------------------------
"{\"a\": [1, 2, 3, 4, 5]}"
(1 行记录) demo=# SELECT json_scalar('[1, 2, 3, 4, 5]') ;
json_scalar
-------------------
"[1, 2, 3, 4, 5]"
(1 行记录) demo=# SELECT json_scalar('1') ;
json_scalar
-------------
"1"
(1 行记录) demo=# SELECT json_scalar('true') ;
json_scalar
-------------
"true"
(1 行记录)

JSON_SERIALIZE

功能:

JSON函数,表达式用于把JSON类型的数据转换为字符串或二进制字符串。返回值可以是任意字符串类型或二进制字符串类型。

用法:

json_serialize (
expression [ FORMAT JSON [ ENCODING UTF8 ] ]
[ RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ] ] ]
) expression [ FORMAT JSON [ ENCODING UTF8 ] ]:转需要换为字符或二进制字符串的json值。
[ RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ] ] ]:json数据转换后的数据类型(text, char, bytea)等,默认是text类型。

示例:


demo=# select json_serialize('{"a": [1, 2, 3, 4, 5]}') ;
json_serialize
------------------------
{"a": [1, 2, 3, 4, 5]}
(1 行记录) demo=# select json_serialize('{"a": [1, 2, 3, 4, 5]}' returning varchar(10)) ;
json_serialize
----------------
{"a": [1,
(1 行记录) demo=# select json_serialize('{"a": [1, 2, 3, 4, 5]}' returning bytea) ;
json_serialize
------------------------------------------------
\x7b2261223a205b312c20322c20332c20342c20355d7d
(1 行记录)

JSON_TYPEOF

功能:

JSON函数,把最外层的JSON对象类型作为一个文本串返回。可能类型是: object 、 array 、 string 、number 、 boolean 以及 null 。

用法:

json_typeof(json)

示例:

参照JSONB_TYPEOF使用示例

JSON_VALUE

功能:

JSON函数,从一段给定的json文本中获取所需要的值,返回为标量值或者用户自定义的object或者collection类型 。

用法:

json_value(
expression [ format json [ encoding utf8 ] ],
json_basic_path_expression
[returning json_value_return_type]
[{ null|error|default literal} on error]
[{ null|error|default literal} on empty]
) expression:输入的json文本,完整的支持可以为字符常量、函数、或者列名(数据类型为clob,blob或者varchar2),V8R6C7版本只支持输入类型为JSONB类型,其他类型后续补充;
format json:是在expression为字符串类型时将expression格式化成json格式。
encoding utf8:指定输入为二进制类型时的字符集。
json_basic_path_expression:用于指定json文件所要查询的路径。
returning json_value_return_type:指定返回值的数据类型。若没有使用此子句,返回数据类型为text。支出返回类型:CHAR,VARCHAR,NCHAR,TEXT,NUMERIC,INT2,INT4,INT8,FLOAT4,FLOAT8,DATE,TIME,TIMESTAMP,TIMETZ,TIMESTAMPTZ,JSON,JSONB,BOOL
{ null|error|default literal} on error:指定错误发生时的返回值。
{ null|error|default literal} on empty:指定没有结果相匹配时的返回值。

示例:


-- 获取值
demo=# select json_value('{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}'::jsonb,'$.a');
json_value
------------
1
(1 行记录) demo=# select json_value('{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}'::jsonb,'$.b');
json_value
------------ (1 行记录) demo=# select json_value('{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}'::jsonb,'$.b[0]');
json_value
------------
2
(1 行记录) demo=# select json_value('{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}'::jsonb,'$.b.size()');
json_value
------------
2
(1 行记录) demo=# select json_value('{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}'::jsonb,'$.*.size() ? (@ > 1)');
json_value
------------
2
(1 行记录) -- 指定返回值的数据类型。若没有使用此子句,返回数据类型为text。 demo=# select json_value('{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}'::jsonb,'$.*.size() ? (@ > 1)' returning numeric);
json_value
------------
2
(1 行记录) demo=# select json_value('{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}'::jsonb,'$.*.size() ? (@ > 1)' returning text);
json_value
------------
2
(1 行记录)

KingbaseES Json 系列十二:Json其他函数的更多相关文章

  1. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

  2. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  3. SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

    原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...

  4. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  5. 爬虫系列(十二) selenium的基本使用

    一.selenium 简介 随着网络技术的发展,目前大部分网站都采用动态加载技术,常见的有 JavaScript 动态渲染和 Ajax 动态加载 对于爬取这些网站,一般有两种思路: 分析 Ajax 请 ...

  6. Alamofire源码解读系列(十二)之时间轴(Timeline)

    本篇带来Alamofire中关于Timeline的一些思路 前言 Timeline翻译后的意思是时间轴,可以表示一个事件从开始到结束的时间节点.时间轴的概念能够应用在很多地方,比如说微博的主页就是一个 ...

  7. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. Scala学习十二——高阶函数

    一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...

  9. SpringBoot系列(十二)过滤器配置详解

    SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...

  10. 打开order by的大门,一探究竟《死磕MySQL系列 十二》

    在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like  ...

随机推荐

  1. 使用ORACLE外部表装载复杂数据

    原文:http://www.oracle.com/technetwork/issue-archive/2013/13-jan/o13asktom-1886639.html I am using SQL ...

  2. 【CVE-2024-21626】容器逃逸漏洞修复

    哈喽大家好,我是咸鱼. 好久不见,最近有一个很火的 CVE--runc 容器逃逸漏洞.年前的时候我们已经在测试环境进行了相关操作打算年后线上进行修复. 因为今天咸鱼才开工,所以文章也就拖到了现在 漏洞 ...

  3. 开源开发者的狂欢,STRK开了一个好头!附领取价值800元的web3空投教程

    这两天在Github和推特上最热闹的事情便是知名ETH(以太坊)二层公链项目STRK给所有gtihub上排名前5000的开源项目的项目贡献者提供了价值800元的代币空投,其中不乏前端程序员.大学生等w ...

  4. 无 dmp 文件的情况下使用 windbg

    项目线上出现了闪退问题,查看日志发现是 sentry 模块出问题了 因为用户电脑上没有 pdb 文件,所以无法加载具体函数的调用位置,只能手动去计算 具体步骤是:在 windbg.exe 中加载 se ...

  5. SpringBoot学习-图文并茂写Hello World

    一. 生成SpringBoot新项目demo 在 https://start.spring.io/ 生成一个新的项目 1. 步骤: 1)Project 选择 Maven Project 2)Sprin ...

  6. py.path模块

    # https://py.readthedocs.io/en/latest/path.html import os dir_path = "/home/lw/" os.path.j ...

  7. 使用go module导入本地包

    go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具. 前提 假设我们有learngo和mypackage两个 ...

  8. 用BootstrapBlazor组件制作新增Customer Order的页面

    1.在Shared目录下新建OrderCreateView.razor文件: 2.在OrderCreateView.razor里用最简单的表格准备好布局 3.准备好BootstrapBlazor的组件 ...

  9. Oracle触发器联合唯一约束

    Oracle支持可为空字端的唯一约束呢?下面就是用触发器作出的限制语句,仅供参考: CREATE OR REPLACE TRIGGER Tg_Completion_Test BEFORE INSERT ...

  10. [VueJsDev] 目录列表

    [VueJsDev] 目录列表 云服务器域名就一年,gitee上有不给发布,没办法 https://www.vuejsdev.com/ 还是迁移到博客园吧. 文章大部分是2022年9月份左右写的. 已 ...