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. egrep命令

    egrep命令 egrep命令用于模式搜索,属于grep函数族,工作原理和grep -E一样,其将模式视为扩展正则表达式,并打印出与模式匹配的行,如果有多个文件具有匹配的模式,其还能显示每行的文件名. ...

  2. LAMP环境部署wordpress

    关于搭建LAMP 请参考:https://blog.csdn.net/IndexMan/article/details/122991129 本篇是基于LAMP环境搭建wordpress. 上传word ...

  3. 使用spring boot jpa进行增删改查

    项目地址:https://gitee.com/indexman/spring_boot_in_action 编写实体类User package com.laoxu.springboot.entity; ...

  4. 【Android逆向】脱壳项目frida_dump 原理分析

    脱dex核心文件dump_dex.js 核心函数 function dump_dex() { var libart = Process.findModuleByName("libart.so ...

  5. go-ini解析ini文件

    文档 https://github.com/go-ini/ini https://ini.unknwon.io/docs/intro/getting_started go get -u gopkg.i ...

  6. 数据分析day02

    案例 需求:双均线策略制定 1.使用tushare包获取某股票的历史行情数据 2.计算该股票历史数据的5日均线和30日均线 - 什么是均线? - 对于每一个交易日,都可以计算出前N天的移动平均值,然后 ...

  7. NodeJS本地公用类库

    git + npm link 先来看一下npm install 文档. npm 支持安装 git 仓库,支持 git , git+ssh , git+http , git+https , or git ...

  8. 【Azure Kubernetes】通过 kubelogin 进行非交互式登录AKS

    问题描述 当对AKS的登录方式(认证和授权)从"Local Account with Kubernetes RBAC "改变为"Azure AD authenticati ...

  9. ElasticSearch基本查询使用(2)

    在介绍本章之前,需要先打开安装的Kibana页面, 并打开命令行工具页面: 并且根据上节的介绍,我们需要根据中文搜索,所以需要在建立映射时,指定中文字段的分词器为Ik分词器, 默认为英文分词器,每个中 ...

  10. ASP.NET Core 移除已注册的过滤器

    背景 ABP vNext 默认对异常响应进行了处理,现在某个项目需要自定义异常响应结果. 问题 在 ABP vNext 的 MVC 模块当中,可以看到是通过 AddService(typeof(Abp ...