当前位置: 首页 > news >正文

KingbaseES Json 系列三:Json数据操作函数一

KingbaseES Json 系列三--Json数据操作函数一(JSONB_EACH,JSONB_EACH_TEXT,JSONB_OBJECT_KEYS,JSONB_EXTRACT_PATH,JSONB_EXTRACT_PATH_TEXT,JSON_EACH,JSON_EACH_TEXT,JSON_OBJECT_KEYS,JSON_EXTRACT_PATH,JSON_EXTRACT_PATH_TEXT)

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函数列表

  • JSONB_EACH

  • JSONB_EACH_TEXT

  • JSONB_OBJECT_KEYS

  • JSONB_EXTRACT_PATH

  • JSONB_EXTRACT_PATH_TEXT

  • JSON_EACH

  • JSON_EACH_TEXT

  • JSON_OBJECT_KEYS

  • JSON_EXTRACT_PATH

  • JSON_EXTRACT_PATH_TEXT

json函数简介

JSONB_EACH

功能:

JSON处理函数,扩展最外层的JSON对象成为一组键值对。

用法:

jsonb_each(jsonb)

示例:

demo=# SELECT jt.jsondata,je.* FROM jsontable jt,  jsonb_each(jt.jsondata) je;jsondata                       | key |          value          
------------------------------------------------------+-----+-------------------------{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | f2  | {"f3": 1}{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | f4  | {"f5": 99, "f6": "foo"}{"a":[1,2,3,4,5]}                                    | a   | [1, 2, 3, 4, 5]{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | a   | 1{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | b   | ["2", "a b"]{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | c   | {"d": 4, "e": "ab c"}
(6 行记录)

JSONB_EACH_TEXT

功能:

JSON处理函数,扩展最外层的JSON对象成为一组键值对,返回值为 text 类型。

用法:

jsonb_each_text(jsonb)

示例:

demo=# SELECT jt.jsondata,je.* FROM jsontable jt,  jsonb_each_text(jt.jsondata) je;jsondata                       | key |          value          
------------------------------------------------------+-----+-------------------------{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | f2  | {"f3": 1}{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | f4  | {"f5": 99, "f6": "foo"}{"a":[1,2,3,4,5]}                                    | a   | [1, 2, 3, 4, 5]{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | a   | 1{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | b   | ["2", "a b"]{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | c   | {"d": 4, "e": "ab c"}
(6 行记录)

JSONB_OBJECT_KEYS

功能:

JSON函数,返回外层JSON对象中键的集合。

用法:

jsonb_object_keys(jsonb)

示例:

demo=#  select jt.jsondata,  jo.* from  jsontable jt,  jsonb_object_keys(jt.jsondata) jo;jsondata                       | jo 
------------------------------------------------------+----{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | f2{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | f4{"a":[1,2,3,4,5]}                                    | a{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | a{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | b{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | c
(6 行记录)

JSON_EXTRACT_PATH

功能:

JSON处理函数,返回由 path_elems 指向的JSON值(等效于#>操作符)。

用法:

json_extract_path(from_json json, VARIADIC path_elems text[])

示例:

demo=# select jt.jsondata,  je.* from jsontable jt,  json_extract_path(jt.jsondata ,'a') je;jsondata                       |     je      
------------------------------------------------------+-------------{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | {"a":[1,2,3,4,5]}                                    | [1,2,3,4,5]{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | 1
(3 行记录)-- 多个路径提取子对象中的值demo=# select jt.jsondata,  je.* from jsontable jt,  json_extract_path(jt.jsondata ,'f4' ,'f5') je;jsondata                       | je 
------------------------------------------------------+----{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | 99{"a":[1,2,3,4,5]}                                    | {"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | 
(3 行记录)

JSON_EXTRACT_PATH_TEXT

功能:

JSON处理函数,以 text 类型返回由 path_elems 指向的JSON值(等效于#>操作符)。

用法:

json_extract_path_text(from_json json, VARIADIC path_elems text[])

示例:

demo=# select jt.jsondata,  je.* from jsontable jt,  json_extract_path_text(jt.jsondata ,'a') je;jsondata                       |     je      
------------------------------------------------------+-------------{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | {"a":[1,2,3,4,5]}                                    | [1,2,3,4,5]{"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | 1
(3 行记录)-- 多个路径提取子对象中的值demo=# select jt.jsondata,  je.* from jsontable jt,  json_extract_path_text(jt.jsondata ,'f4' ,'f5') je;jsondata                       | je 
------------------------------------------------------+----{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}            | 99{"a":[1,2,3,4,5]}                                    | {"a":1, "b": ["2", "a b"],"c": {"d":4, "e": "ab c"}} | 
(3 行记录)

JSON_EACH

功能:

JSON处理函数,扩展最外层的JSON对象成为一组键值对。

用法:

json_each(json)

示例:

参照JSONB_EACH使用示例
  • JSONB_EACH

JSON_EACH_TEXT

功能:

JSON处理函数,扩展最外层的JSON对象成为一组键值对,返回值为 text 类型。

用法:

json_each_text(json)

示例:

参照JSONB_EACH_TEXT使用示例
  • JSONB_EACH_TEXT

JSON_OBJECT_KEYS

功能:

JSON函数,返回外层JSON对象中键的集合。

用法:

json_object_keys(json)

示例:

参照JSONB_OBJECT_KEYS使用示例
  • JSONB_OBJECT_KEYS

JSONB_EXTRACT_PATH

功能:

JSON处理函数,返回由 path_elems 指向的JSON值(等效于#>操作符)。

用法:

jsonb_extract_path(from_json json, VARIADIC path_elems text[])

示例:

参照JSONB_EXTRACT_PATH使用示例
  • JSONB_EXTRACT_PATH

JSONB_EXTRACT_PATH_TEXT

功能:

JSON处理函数,以 text 类型返回由 path_elems 指向的JSON值(等效于#>操作符)。

用法:

jsonb_extract_path_text(from_json json, VARIADIC path_elems text[])

示例:

参照JSONB_EXTRACT_PATH_TEXT使用示例
  • JSONB_EXTRACT_PATH_TEXT

相关文章:

KingbaseES Json 系列三:Json数据操作函数一

KingbaseES Json 系列三--Json数据操作函数一(JSONB_EACH,JSONB_EACH_TEXT,JSONB_OBJECT_KEYS,JSONB_EXTRACT_PATH,JSONB_EXTRACT_PATH_TEXT,JSON_EACH,JSON_EACH_TEXT,JSON_OBJECT_KEYS,JSON_EXTRACT_PATH,JSON_EXTRACT_PATH_TEXT) JSON 数据类型是用来存储 JSON(JavaScript O…...

《设计模式》单例模式

《设计模式》单例模式 单例模式是一种常用的设计模式,其主要优点有: 提供了对唯一实例的全局访问。单例模式保证了整个系统中只有一个实例,这样就可以方便地对该实例进行访问和操作,避免了多个实例之间的冲突和不一致。避免了重…...

C/C++每日一练(20230224)

目录 1. 字符串排序 2. Excel表列名称 3. 颠倒二进制位 附录&#xff1a; 位移运算符 左移运算符<< 1.无符号 2.有符号 右移运算符>> 1.无符号 2.有符号 程序测试 1. 字符串排序 编写程序&#xff0c;输入若干个字符串。 要求: &#xff08;1&#x…...

基于YOLO的酸枣病虫害检测识别实践

在我前面的博文中对于农作物病虫害的检测识别已经做过了&#xff0c;不过那个主要是针对水稻的&#xff0c;文章如下&#xff1a;《基于yolov5的轻量级水稻虫害目标检测项目实践》感兴趣的话可以自行移步阅读。这里主要是针对酸枣常见的几种病虫害检测检测识别&#xff0c;首先…...

WAF:ModSecurity on Nginx(15)

预备知识 Nginx概述 Nginx ("engine x") 是一个高性能的HTTP和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;第一个公开版本0.1.0发布于2004年10月4日。其将源代…...

Qt 第3课、Qt 中的字符串类

1、C 标准库 STL STL 是意义上需要与C 一同发布的标准库STL 是一套以模板技术完成的 C类库STL 中包含了常用的算法和数据结构STL 包含了字符串类 2、Qt 和 STL STL 的具体实现依赖于编译器生产厂商STL 的 “标准” 只是其接口是标准的 — 相同的全局函数 — 相同的算法类和数…...

Vulnhub靶场----6、DC-6

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-6下载地址&#xff1a;https://download.vulnhub.com/dc/DC-6.zip kali&#xff1a;192.168.144.148 DC-6&#xff1a;192.168.144.154 靶机描述&#xff1a;选择带k01的密码后面会用到 访问192.168.144.154&…...

华为OD机试真题Python实现【去重求和】真题+解题思路+代码(20222023)

去重求和 给定一个数组,编写一个函数, 计算他的最大N个数和最小N个数的和, 需要对数组进行去重。 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目录汇总 输入 第一行输入M,M表示数组大小 第二行输入M个数,表示数组内容 第三行输入N表示需要…...

lammps教程:Ovito选择特定晶粒的方法

大家好&#xff0c;我是小马老师。 本文介绍如何使用ovito提取特定的晶粒。 在多晶的lammps模拟中&#xff0c;可能会对某一个特定晶粒的变形情况进行分析&#xff0c;此时&#xff0c;需要找到这个晶粒&#xff0c;并进行单独分析。 ovito有专用的晶粒识别命令&#xff0c;…...

DevEco Studio 3.1 Beta1版本发布——新增六大关键特性,开发更高效

智能代码编辑、端云一体化开发、低代码开发个性化…… 六大新增关键特性&#xff0c;开发更高效&#xff0c;体验更觉妙&#xff01; 立即点击链接下载&#xff0c;做DevEco Studio 3.1 Beta1版本尝鲜者&#xff01; 下载链接&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 …...

【蓝桥杯每日一题】二分算法

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;我与杀戮之中绽放&#xff0c;亦如黎明的花…...

Spring Batch 高级篇-并行步骤

目录 引言 概念 案例 转视频版 引言 接着上篇&#xff1a;Spring Batch 高级篇-多线程步骤&#xff0c;了解Spring Batch多线程步骤后&#xff0c;接下来一起学习一下Spring Batch 高级功能-并行步骤 概念 并行步骤&#xff0c;指的是某2个或者多个步骤同时执行。比如下…...

对spring的@Cacheable缓存理解

1 什么是缓存第一个问题&#xff0c;首先要搞明白什么是缓存&#xff0c;缓存的意义是什么。对于普通业务&#xff0c;如果要查询一个数据&#xff0c;一般直接select数据库进行查找。但是在高流量的情况下&#xff0c;直接查找数据库就会成为性能的瓶颈。因为数据库查找的流程…...

力扣-市场分析

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1158. 市场分析二、解题1.错误示范①提交SQL运行结果2.正确示范①提交SQL运行结果3.错误示范②提交SQL运行结果4.正确示范②提交SQL运行结果5.其他总结前…...

【2357. 使数组中所有元素都等于零】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个非负整数数组 nums 。在一步操作中&#xff0c;你必须&#xff1a; 选出一个正整数 x &#xff0c;x 需要小于或等于 nums 中 最小 的 非零 元素。nums 中的每个正整数都减去 x。 返回使 n…...

什么品牌的游戏蓝牙耳机比较好?玩游戏延迟低的蓝牙耳机推荐

游戏耳机的出现其实最主要的作用就是让玩家能够更专注的沉浸在游戏世界内&#xff0c;在声音层面去享受游戏的沉浸感&#xff0c;游戏最重要的就是操作灵敏&#xff0c;需要快速通过声音来判断敌人走向&#xff0c;所以小编特意整理了一期玩游戏延迟低的蓝牙耳机。 一、南卡小…...

day 33 状态压缩dp

二维状态压缩dp对于解决哈密顿回路问题的状态压缩dp只能计算固定起点到其他点的总方案数或最小路径等回路计数小蓝现在在第一栋教学楼&#xff0c;他想要访问每栋教学楼正好一次&#xff0c;最终回到第一栋教学楼&#xff08;即走一条哈密尔顿回路&#xff09;可看做&#xff1…...

扬帆优配|超3600股飘绿,人民币贬值近300点!外资净卖近38亿

今天早盘&#xff0c;A股整体震动调整&#xff0c;白马蓝筹股体现较弱&#xff0c;上证50、沪深300指数均跌超1%。 盘面上&#xff0c;国防军工、造纸、数字钱银、IT设备等板块逆势活跃&#xff0c;酿酒、酒店餐饮、钙钛矿电池、有色等板块跌幅居前。两市半日成交4577亿&#x…...

【编程基础之Python】6、Python基础知识

【编程基础之Python】6、Python基础知识Python基础知识Python的基本要素模块语句表达式注释Python的代码格式Python基础知识 Python 是一种高级的、动态的、解释型的编程语言&#xff0c;具有简单易学、开发效率高、可读性强等特点&#xff0c;广泛应用于数据科学、Web 开发、…...

selenium基本操作

爬虫与反爬虫之间的斗争爬虫&#xff1a;对某个网站数据或图片感兴趣&#xff0c;开始抓取网站信息&#xff1b;网站&#xff1a;请求次数频繁&#xff0c;并且访问ip固定&#xff0c;user_agent也是python&#xff0c;开始限制访问&#xff1b;爬虫&#xff1a;通过设置user_a…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...