KingbaseES Json 系列七:Json记录操作函数二
KingbaseES Json 系列七--Json记录操作函数二(JSONB_POPULATE_RECORD,JSONB_POPULATE_RECORDSET,JSON_POPULATE_RECORD,JSON_POPULATE_RECORDSET)
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_POPULATE_RECORD
功能:
JSON函数,扩展 from_json 中的对象成一个行,它的列匹配由 base 定义的记录类型。在 JSONB 对象的那些与自定义类型中的列名匹配的字段,他们的值将被插入到对应的输出的列中。而 JSONB 对象中的那些没有匹配到自定类型中的列名的字段将会被忽略。
用法:
jsonb_populate_record(base anyelement,from_json jsonb)
示例:
-- 创建自定义的 SQL 类型
CREATE TYPE recordtype as (a INT, b text, c text);
--解析json数据
demo=# SELECT * FROM jsonb_populate_record(NULL::recordtype , '{"a":1,"b":"bcol","c":"c_text"}');
a | b | c
---+------+--------
1 | bcol | c_text
(1 行记录)
-- 数据value的类型需要能够隐式转换到record的匹配类型中
demo=# SELECT * FROM jsonb_populate_record(NULL::recordtype , '{"a":"a","b":"bcol","c":""}');
错误: 无效的类型 integer 输入语法: "a"
demo=# SELECT * FROM jsonb_populate_record(NULL::recordtype , '{"a":"1","b":"bcol","c":""}');
a | b | c
---+------+---
1 | bcol |
(1 行记录)
-- 数据中不存在record定义的属性时,默认返回null
demo=# SELECT * FROM jsonb_populate_record(NULL::recordtype , '{"a":1,"b":"bcol"}');
a | b | c
---+------+---
1 | bcol |
(1 行记录)
-- 数据中多余的属性时,默认忽略
demo=# SELECT * FROM jsonb_populate_record(NULL::recordtype , '{"a":1,"b":"bcol","c":"c_text","d":"dcol"}');
a | b | c
---+------+--------
1 | bcol | c_text
(1 行记录)
-- 通过设置record转换类型,设置数据不存在时默认值
demo=# SELECT * FROM jsonb_populate_record((0 , 'b_default' , 'not exist' )::recordtype , '{"a":1,"b":"bcol"}');
a | b | c
---+------+-----------
1 | bcol | not exist
(1 行记录)
-- 从表字段中解析数据
demo=# SELECT jt.jsonrecord ,jpr.* FROM jsontable jt , jsonb_populate_record(NULL::recordtype , jt.jsonrecord) jpr;
jsonrecord | a | b | c
-----------------------------+---+------+----
{"a":1,"b":"bcol","c":"cc"} | 1 | bcol | cc
{"a":1,"b":"bcol","c":""} | 1 | bcol |
{"a":1,"b":"bcol","d":"dd"} | 1 | bcol |
(3 行记录)
-- 通过设置record转换类型,设置数据不存在时默认值
demo=# SELECT jt.jsonrecord ,jpr.* FROM jsontable jt , jsonb_populate_record((0 , 'not exist' , 'not exist')::recordtype , jt.jsonrecord) jpr;
jsonrecord | a | b | c
-----------------------------+---+------+-----------
{"a":1,"b":"bcol","c":"cc"} | 1 | bcol | cc
{"a":1,"b":"bcol","c":""} | 1 | bcol |
{"a":1,"b":"bcol","d":"dd"} | 1 | bcol | not exist
(3 行记录)
JSONB_POPULATE_RECORDSET
功能:
JSON函数,扩展 from_json 中最外层的对象数组成一个集合,它的列匹配由 base 定义的记录类型。
用法:
jsonb_populate_recordset(base anyelement,from_json jsonb)
示例:
CREATE TYPE recordtype as (a INT, b text, c text);
-- 直接解析json数据
demo=# SELECT * FROM jsonb_populate_recordset(NULL::recordtype , '[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","c":"c_dd"}]');
a | b | c
---+------+------
1 | bcol | cc
1 | bcol | c_dd
(2 行记录)
-- 数据value的类型需要能够隐式转换到record的匹配类型中
demo=# SELECT * FROM jsonb_populate_recordset(NULL::recordtype , '[{"a":"a","b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]');
错误: 无效的类型 integer 输入语法: "a"
demo=# SELECT * FROM jsonb_populate_recordset(NULL::recordtype , '[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]');
a | b | c
---+------+----
1 | bcol | cc
1 | bcol |
(2 行记录)
-- 数据中不存在record定义的属性时,默认返回null
-- 数据中多余的属性时,默认忽略
demo=# SELECT * FROM jsonb_populate_recordset(NULL::recordtype , '[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]');
a | b | c
---+------+----
1 | bcol | cc
1 | bcol |
(2 行记录)
-- 通过设置record转换类型,设置数据不存在时默认值
demo=# SELECT * FROM jsonb_populate_recordset((0 , 'b_default' , 'not exist' )::recordtype , '[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}]');
a | b | c
---+------+-----------
1 | bcol | cc
1 | bcol | not exist
(2 行记录)
-- 从表字段中解析数据
demo=# SELECT jt.jsonset ,jpr.* FROM jsontable jt , jsonb_populate_recordset(NULL::recordtype , jt.jsonset) jpr;
jsonset | a | b | c
-------------------------------------------------------------------+---+------+--------
[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}] | 1 | bcol | cc
[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}] | 1 | bcol |
[{"a":1,"b":"bcol","c":""},{"a":1,"b":"bcol","e":""}] | 1 | bcol |
[{"a":1,"b":"bcol","c":""},{"a":1,"b":"bcol","e":""}] | 1 | bcol |
[{"a":1,"b":"bcol","c":"cc_3_1"},{"a":1,"b":"bcol","c":"cc_3_2"}] | 1 | bcol | cc_3_1
[{"a":1,"b":"bcol","c":"cc_3_1"},{"a":1,"b":"bcol","c":"cc_3_2"}] | 1 | bcol | cc_3_2
(6 行记录)
-- 通过设置record转换类型,设置数据不存在时默认值
demo=# SELECT jt.jsonset ,jpr.* FROM jsontable jt , jsonb_populate_recordset((0 , 'not exist' , 'not exist')::recordtype , jt.jsonset) jpr;
jsonset | a | b | c
-------------------------------------------------------------------+---+------+-----------
[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}] | 1 | bcol | cc
[{"a":1,"b":"bcol","c":"cc"},{"a":1,"b":"bcol","d":""}] | 1 | bcol | not exist
[{"a":1,"b":"bcol","c":""},{"a":1,"b":"bcol","e":""}] | 1 | bcol |
[{"a":1,"b":"bcol","c":""},{"a":1,"b":"bcol","e":""}] | 1 | bcol | not exist
[{"a":1,"b":"bcol","c":"cc_3_1"},{"a":1,"b":"bcol","c":"cc_3_2"}] | 1 | bcol | cc_3_1
[{"a":1,"b":"bcol","c":"cc_3_1"},{"a":1,"b":"bcol","c":"cc_3_2"}] | 1 | bcol | cc_3_2
(6 行记录)
JSON_POPULATE_RECORD
功能:
JSON函数,扩展 from_json 中的对象成一个行,它的列匹配由 base 定义的记录类型。
用法:
json_populate_record(base anyelement,from_json jsonb)
示例:
参照JSONB_POPULATE_RECORD使用示例
JSON_POPULATE_RECORDSET
功能:
JSON函数,扩展 from_json 中最外层的对象数组成一个集合,它的列匹配由 base 定义的记录类型。
用法:
json_populate_record(base anyelement,from_json jsonb)
示例:
参照JSONB_POPULATE_RECORDSET使用示例
KingbaseES Json 系列七:Json记录操作函数二的更多相关文章
- Apache Kafka系列(七)Kafka Repartition操作
Kafka提供了重新分区的命令,但是只能增加,不能减少 我的kafka安装在/usr/local/kafka_2.12-1.0.2目录下面, [root@i-zk1 kafka_2.-]# bin/k ...
- PHP文件操作函数二
PHP部分文件访问函数总结: 1.filetype("文件路径") //可以输出相关文件类型,返回之为:dir/file... 2.stat("文件名") / ...
- Python股票分析系列——基础股票数据操作(二).p4
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第4部分.在本教程中,我们将基于Adj Close列创建烛台/ OHLC图,这将允许我介绍重新采 ...
- SQL学习记录:函数(二)
字符串函数 1.获取字符的ASCII码 语法结构: ASCII(espression) 这里的expression是一个返回char或varchar数据类型的表达式,ASCII函数仅对表达式最左 ...
- Python 字符串操作函数二
#-*- coding:utf-8 -*- line = "l want watch movie with you ." print(line.center(50)) print( ...
- Python股票分析系列——基础股票数据操作(一).p3
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...
- Android(java)学习笔记208:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- Android(java)学习笔记151:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- Web API删除JSON格式的文件记录
Insus.NET的系列Web Api学习文章,这篇算是计划中最后一篇了,删除JSON格式的文件记录.前一篇<Web Api其中的PUT功能演示>http://www.cnblogs.co ...
随机推荐
- ffmpeg之avformat_alloc_output_context2
函数原型: int avformat_alloc_output_context2(AVFormatContext **ctx, const AVOutputFormat *oformat, const ...
- 使用Python读取nc数据
在地学领域,nc 格式的文件可谓随处可见,这种文件可以存储多维数字矩阵,同时又封装了自描述信息(例如经纬度.高度层.时间戳.单位等),因此使用起来十分方便,不用担心数据和描述信息分离而导致数据不可用. ...
- 【LeetCode二叉树#18】修剪二叉搜索树(涉及重构二叉树与递归回溯)
修剪二叉搜索树 力扣题目链接(opens new window) 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R.通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) .你 ...
- 【LeetCode二叉树#06】获取二叉树的所有路径(分析递归中的回溯机制)
二叉树所有路径 力扣题目链接(opens new window) 给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 思路 根据题意,每次遍历至子节点, ...
- DataGear 制作自定义柱状图条目颜色的数据可视化看板
DataGear 看板提供了dg-chart-options图表选项配置功能,可自定义样式.位置.显示内容等图表选项,其中的processUpdateOptions回调函数配置项,可以在图表更新数据前 ...
- 维基百科Wikipedia镜像网站列表(全部已被封)
序号 网址 备注 1 https://chi.jinzhao.wiki/wiki (中文版) https://en.jinzhao.wiki/wiki/Main_Page (英文版) 支持多种语言. ...
- 【Azure 环境】Notification Hub无法创建Policy : 出现 500 Internal Server Error
问题描述 Notification Hub出现问题,无法创建Policy(Rule). 获得的错误消息: Error: Error making Read request on Authorizati ...
- 如何在 C# 中以编程的方式将 CSV 转为 Excel XLSX 文件
前言 Microsoft Excel的XLSX格式以及基于文本的CSV(逗号分隔值)格式,是数据交换中常见的文件格式.应用程序通过实现对这些格式的读写支持,可以显著提升性能.在本文中,小编将为大家介绍 ...
- Java 关于变量的赋值
1 /** 2 * 3 * @Description 4 * @author Bytezero·zhenglei! Email:420498246@qq.com 5 * @version 6 * @d ...
- VC-MFC 登陆界面 + 数据库账号+密码
1 // DlgUser.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "Login.h" 6 #inc ...