KingbaseES Json 系列六:Json记录操作函数一
KingbaseES Json 系列六--Json记录操作函数一(JSONB_TO_RECORD,JSONB_TO_RECORDSET,JSON_TO_RECORD,JSON_TO_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_TO_RECORD
功能:
JSON函数,从一个JSON对象构建一个任意的记录,正如所有返回 record 的函数一样,调用者必须用一个 AS 子句显式的定义记录的结构。
用法:
jsonb_to_record(jsonb)
示例:
-- 解析json数据
demo=# SELECT * FROM jsonb_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int,b text);
a | b
---+-----------
1 | [1, 2, 3]
(1 行记录)
-- 数据value的类型需要能够隐式转换到record的匹配类型中
demo=# SELECT * FROM jsonb_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int,b text, c boolean[]);
错误: 无效的类型 boolean 输入语法: "2"
demo=# SELECT * FROM jsonb_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int,b text, c int[]);
a | b | c
---+-----------+---------
1 | [1, 2, 3] | {1,2,3}
(1 行记录)
-- 数据中不存在record定义的属性时,默认返回null
demo=# SELECT * FROM jsonb_to_record('{"a":1,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}') as x(a int,b text, c text[], d text);
a | b | c | d
---+-----------+---------+---
1 | [1, 2, 3] | {1,2,3} |
(1 行记录)
-- 从表字段中解析数据
demo=# select jt.jsonrecord , x.* from jsontable jt , jsonb_to_record(jt.jsonrecord) as x(a int , b text , c text) ;
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 行记录)
JSONB_TO_RECORDSET
功能:
JSON函数,从一个JSON对象数组构建一个任意的记录集合,正如所有返回 record 的函数一样,调用者必须用一个 AS 子句显式的定义记录的结构。
用法:
jsonb_to_recordset(jsonb)
示例:
-- 解析json数据
demo=# SELECT * FROM jsonb_to_recordset ('[{"a":1,"b":"foo","c":true},{"a":"2","b":"bar"}]')as x(a int, b text);
a | b
---+-----
1 | foo
2 | bar
(2 行记录)
-- 数据value的类型需要能够隐式转换到record的匹配类型中
demo=# SELECT * FROM jsonb_to_recordset ('[{"a":1,"b":"foo","c":true},{"a":"2","b":"bar"}]')as x(a int, b text,c int);
错误: 无效的类型 integer 输入语法: "true"
demo=# SELECT * FROM jsonb_to_recordset ('[{"a":1,"b":"foo","c":true},{"a":"2","b":"bar"}]')as x(a int, b text,c boolean);
a | b | c
---+-----+---
1 | foo | t
2 | bar |
(2 行记录)
-- 数据中不存在record定义的属性时,默认返回null
demo=# SELECT * FROM jsonb_to_recordset ('[{"a":1,"b":"foo","c":true},{"a":"2","b":"bar"}]')as x(a int, b text,c boolean,d int);
a | b | c | d
---+-----+---+---
1 | foo | t |
2 | bar | |
(2 行记录)
-- 从表字段中解析数据
demo=# select jt.jsonset , x.* from jsontable jt , jsonb_to_recordset(jt.jsonset) as x(a int , b text , c text) ;
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 行记录)
JSON_TO_RECORD
功能:
JSON函数,从一个JSON对象构建一个任意的记录,正如所有返回 record 的函数一样,调用者必须用一个 AS 子句显式的定义记录的结构。
用法:
json_to_record(jsonb)
示例:
参照JSONB_TO_RECORD使用示例
JSON_TO_RECORDSET
功能:
JSON函数,从一个JSON对象数组构建一个任意的记录集合,正如所有返回 record 的函数一样,调用者必须用一个 AS 子句显式的定义记录的结构。
用法:
json_to_recordset(jsonb)
示例:
参照JSONB_TO_RECORDSET使用示例
KingbaseES Json 系列六:Json记录操作函数一的更多相关文章
- Go语言入门系列(六)之再探函数
Go语言入门系列前面的文章: Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 Go语言入门系列(五)之指针和结构体的使用 在Go语言入门系列(二)之基础语法总结这篇文章中已经 ...
- 5.6Python数据处理篇之Sympy系列(六)---矩阵的操作
目录 目录 前言 (一)矩阵的创建-Matrix() 1.说明: 2.源代码: 3.输出: (二)常用的构造矩阵 1.说明: 2.源代码: 3.输出: (三)基本操作 1.说明: 2.源代码: 3.输 ...
- [jQuery学习系列六]6-jQuery实际操作小案例
前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> &l ...
- 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 ...
- javascript、js操作json方法总结(json字符创转换json对象)
相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资 料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格 ...
- 【SqlServer系列】JSON数据
1 概述 本文将结合MSDN简要概述JSON数据. 2 具体内容 JSON 是一种流行的数据格式,用于在现代 Web 和移动应用程序中交换数据. JSON 还可用于在 Microsoft Az ...
- json系列(三)cjson,rapidjson,yyjson解析性能对比
前言 本篇对cjson,rapidjson,yyjson三种json反序列化工具的性能进行对比. 有json样本数据如下: 实验环境: cpu:Xeon cpu主频:2.20GHz 以下示例均未对字段 ...
随机推荐
- VMWare“Could not get vmci driver version:句柄无效”的错误
这几天都不顺,从周一接手数据仓库的事,本来以为很简单,很快都能搞定,结果搞了一天没搞定,主要原因,自己觉得是系统底层搭建缺失个别库文件, 想换一个高一点版本的虚拟系统centos6.2结果又把虚拟机搞 ...
- docker基于commit方式为镜像添加SSH服务
下载启动镜像 docker pull ubuntu: 18.04 docker run -it ubuntu:18.04 bash 配置软件源 备份/etc/apt/sources.list#备份cp ...
- win32 - 使用Desktop Duplication API复制桌面图像
该代码来源于codeproject,经过测试发现,在屏幕处于旋转的情况下捕获的图像是黑色的.暂时没有找到原因. 代码开箱即用, #define WIN32_LEAN_AND_MEAN #include ...
- 前端树形Tree数据结构使用-🤸🏻♂️各种姿势总结
01.树形结构数据 前端开发中会经常用到树形结构数据,如多级菜单.商品的多级分类等.数据库的设计和存储都是扁平结构,就会用到各种Tree树结构的转换操作,本文就尝试全面总结一下. 如下示例数据,关键字 ...
- SpringBoot事务注解@Transactional 事物回滚、手动回滚事物
处理springboot 下提交事务异常,数据库没有回滚的问题. spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作. 什么 ...
- 第120篇: DOM编程(常用操作、动态脚本、样式及动态表格)
好家伙,我回来了, 本篇为<JS高级程序设计>第十四章"DOM编程"学习笔记 1.DOM编程 我们知道DOM是HTML文档的编程接口, 我们可以通过HTML代码实现 ...
- 【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
问题描述 是否可以将Swagger 的API定义导入导Azure API Management中? 操作步骤 是的,可以通过APIM门户导入单个的API Swagger定义文件.具体步骤如下: 第一步 ...
- Java 常见的两个错误 -------1.栈溢出 java.lang.StackOverflowError 2.堆溢出 java.lang.OutOfMemoryError /OOM
1 package com.bytezero.exception; 2 3 /** 4 * 5 * @Description Error 6 * @author Bytezero·zhenglei! ...
- 文心一言 VS 讯飞星火 VS chatgpt (209)-- 算法导论15.4 6题
六.设计一个 O(nlgn) 时间的算法,求一个 n 个数的序列的最长单调递增子序列.(提示:注意到,一个长度为 i 的候选子序列的尾元素至少不比一个长度为 i-1 候选子序列的尾元素小.因此,可以在 ...
- go程序在mac下的交叉编译
主页 微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ 背景 go语言的一大优势就是跨平台,go语言是编译型语言,与Java.C#等语 ...