KingbaseES Json 系列九:Json路径查询函数
KingbaseES Json 系列九--Json路径查询函数(JSONB_PATH_EXISTS,JSONB_PATH_MATCH,JSONB_PATH_QUERY,JSONB_PATH_QUERY_ARRAY,JSONB_PATH_QUERY_FIRST)
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_PATH_EXISTS
功能:
JSON函数,检查JSON路径是否返回指定JSON值的任何项。
用法:
jsonb_path_exists(target jsonb, path jsonpath[, vars jsonb [, silent bool]])
示例:
demo=# select jsonb_path_exists('{"a": [1, 2, 3, 4, 5]}'::jsonb ,'$.a') ;
jsonb_path_exists
-------------------
t
(1 行记录)
demo=# select jsonb_path_exists('{"a": [1, 2, 3, 4, 5]}'::jsonb ,'$.a[*] ?(@ >= $min && @ <= $max)', '{"min":2,"max":4}') ;
jsonb_path_exists
-------------------
t
(1 行记录)
JSONB_PATH_MATCH
功能:
JSON函数,返回指定JSON值的JSON路径谓词检查的结果。只考虑结果的第一项。如果结果不是布尔值,则返回NULL.
用法:
jsonb_path_match(target jsonb, path jsonpath [, vars jsonb [, silent bool]])
示例:
demo=# select jsonb_path_match('{"a": [1, 2, 3, 4, 5]}'::jsonb ,'$.a[0]') ;
错误: 应为单个布尔结果
demo=# select jsonb_path_match('{"a":true}'::jsonb ,'$.a') ;
jsonb_path_match
------------------
t
(1 行记录)
demo=# select jsonb_path_match('{"a":0}'::jsonb ,'$.a') ;
错误: 应为单个布尔结果
demo=# select jsonb_path_match('{"a": [1, 2, 3, 4, 5]}'::jsonb ,'exists($.a)');
jsonb_path_match
------------------
t
(1 行记录)
demo=# select jsonb_path_match('{"a": [1, 2, 3, 4, 5]}'::jsonb ,'exists($.a[*] ?(@ >= $min && @ <= $max))', '{"min":2,"max":4}') ;
jsonb_path_match
------------------
t
(1 行记录)
JSONB_PATH_QUERY
功能:
JSON函数返回一个 JSONB 值的集合,它包含了在指定的 JSON 值中所有与指定的路径匹配的值。
用法:
jsonb_path_query(targetjsonb, path jsonpath [, vars jsonb [, silent bool]])
示例:
demo=# select jsonvarchar,jsonb_path_query(jsonvarchar::jsonb ,'$') from jsontable ;
jsonvarchar | jsonb_path_query
---------------------------------------------------------+---------------------------------------------------------
{"f2": {"f3": 1}, "f4": {"f5": 99, "f6": "foo"}} | {"f2": {"f3": 1}, "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, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}
(3 行记录)
demo=# select jsonvarchar,jsonb_path_query(jsonvarchar::jsonb ,'$.a') from jsontable ;
jsonvarchar | jsonb_path_query
---------------------------------------------------------+------------------
{"a": [1, 2, 3, 4, 5]} | [1, 2, 3, 4, 5]
{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}} | 1
(2 行记录)
demo=# select jsonvarchar,jsonb_path_query(jsonvarchar::jsonb ,'$.a[*]') from jsontable ;
jsonvarchar | jsonb_path_query
---------------------------------------------------------+------------------
{"a": [1, 2, 3, 4, 5]} | 1
{"a": [1, 2, 3, 4, 5]} | 2
{"a": [1, 2, 3, 4, 5]} | 3
{"a": [1, 2, 3, 4, 5]} | 4
{"a": [1, 2, 3, 4, 5]} | 5
{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}} | 1
(6 行记录)
demo=# select jsonvarchar,jsonb_path_query(jsonvarchar::jsonb ,'$.a[*] ? (@ >= $min && @ <= $max)','{"min":2,"max":4}') from jsontable ;
jsonvarchar | jsonb_path_query
------------------------+------------------
{"a": [1, 2, 3, 4, 5]} | 2
{"a": [1, 2, 3, 4, 5]} | 3
{"a": [1, 2, 3, 4, 5]} | 4
(3 行记录)
JSONB_PATH_QUERY_ARRAY
功能:
JSON函数,获取指定JSON值的JSON路径返回的所有项,并将结果包装到数组中。
用法:
jsonb_path_query_array(target jsonb, path jsonpath[, vars jsonb [, silent bool]])
示例:
demo=# select jsonvarchar,jsonb_path_query_array(jsonvarchar::jsonb ,'$') from jsontable ;
jsonvarchar | jsonb_path_query_array
---------------------------------------------------------+-----------------------------------------------------------
{"f2": {"f3": 1}, "f4": {"f5": 99, "f6": "foo"}} | [{"f2": {"f3": 1}, "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, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}]
(3 行记录)
demo=# select jsonvarchar,jsonb_path_query_array(jsonvarchar::jsonb ,'$.a') from jsontable ;
jsonvarchar | jsonb_path_query_array
---------------------------------------------------------+------------------------
{"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 jsonvarchar,jsonb_path_query_array(jsonvarchar::jsonb ,'$.a[*]') from jsontable ;
jsonvarchar | jsonb_path_query_array
---------------------------------------------------------+------------------------
{"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 jsonvarchar,jsonb_path_query_array(jsonvarchar::jsonb ,'$.a[*] ? (@ >= $min && @ <= $max)','{"min":2,"max":4}') from jsontable ;
jsonvarchar | jsonb_path_query_array
---------------------------------------------------------+------------------------
{"f2": {"f3": 1}, "f4": {"f5": 99, "f6": "foo"}} | []
{"a": [1, 2, 3, 4, 5]} | [2, 3, 4]
{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}} | []
(3 行记录)
JSONB_PATH_QUERY_FIRST
功能:
JSON函数,获取指定JSON值的JSON路径返回的第一个JSON项。在没有结果时返回NULL。
用法:
jsonb_path_query_first(targetjsonb, path jsonpath [, vars jsonb [, silent bool]])
示例:
demo=# select jsonvarchar,jsonb_path_query_first(jsonvarchar::jsonb ,'$') from jsontable ;
jsonvarchar | jsonb_path_query_first
---------------------------------------------------------+---------------------------------------------------------
{"f2": {"f3": 1}, "f4": {"f5": 99, "f6": "foo"}} | {"f2": {"f3": 1}, "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, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}}
(3 行记录)
demo=# select jsonvarchar,jsonb_path_query_first(jsonvarchar::jsonb ,'$.a') from jsontable ;
jsonvarchar | jsonb_path_query_first
---------------------------------------------------------+------------------------
{"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 jsonvarchar,jsonb_path_query_first(jsonvarchar::jsonb ,'$.a[*]') from jsontable ;
jsonvarchar | jsonb_path_query_first
---------------------------------------------------------+------------------------
{"f2": {"f3": 1}, "f4": {"f5": 99, "f6": "foo"}} |
{"a": [1, 2, 3, 4, 5]} | 1
{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}} | 1
(3 行记录)
demo=# select jsonvarchar,jsonb_path_query_first(jsonvarchar::jsonb ,'$.a[*] ? (@ >= $min && @ <= $max)','{"min":2,"max":4}') from jsontable ;
jsonvarchar | jsonb_path_query_first
---------------------------------------------------------+------------------------
{"f2": {"f3": 1}, "f4": {"f5": 99, "f6": "foo"}} |
{"a": [1, 2, 3, 4, 5]} | 2
{"a": 1, "b": ["2", "a b"], "c": {"d": 4, "e": "ab c"}} |
(3 行记录)
KingbaseES Json 系列九:Json路径查询函数的更多相关文章
- oracle系列九 SET运算符查询
将多个查询用 SET 操作符连接组成一个新的查询 UNION/UNION ALL INTERSECT MINUS 排序:ORDER BY UNION 操作符 UNION 操作符返回两个查询的结果集的并 ...
- 面试系列九 es 提高查询效率
,es性能优化是没有什么银弹的,啥意思呢?就是不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景.也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样. 一 ...
- mysql json 使用 类型 查询 函数
一,对记录的操作 1.创建有json字段的表 -- 创建表 ) , info JSON); 2.插入记录 -- 插入含有json数组的记录 , , "abc", NULL, TRU ...
- 【SqlServer系列】JSON数据
1 概述 本文将结合MSDN简要概述JSON数据. 2 具体内容 JSON 是一种流行的数据格式,用于在现代 Web 和移动应用程序中交换数据. JSON 还可用于在 Microsoft Az ...
- 关于pgsql 的json 和jsonb 的数据查询操作笔记整理
关于pgsql 的json 和jsonb 的数据处理笔记 1. json 和jsonb 区别两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别.json写入快, ...
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...
- python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...
- Android+Servlet+MySql+JSON实现简单的数据查询操作--C/S架构
本例简单地实现Android客户端与服务器端交互,主要是通过客户端输入内容(学号)提交到服务器端,服务器端与数据库交互去查询相应信息(姓名).根据这个做个完整的安卓登录是没问题的.本例数据库服务器都采 ...
- 将数组转化为json字符串(不使用json_encode函数)
将数组转化为json字符串(不使用json_encode函数) public function arrayToJson($arr,$jsonStr=''){ $jsonStr.='{'; foreac ...
- json系列(三)cjson,rapidjson,yyjson解析性能对比
前言 本篇对cjson,rapidjson,yyjson三种json反序列化工具的性能进行对比. 有json样本数据如下: 实验环境: cpu:Xeon cpu主频:2.20GHz 以下示例均未对字段 ...
随机推荐
- ORACLE cannot fetch plan for SQL_ID
今天做SQL执行计划测试的时候,发现sqlplus无法正常打印执行计划,根据网上资料整理如下: ..... SYS@orcl> select * 2 from table( 3 ...
- Java压缩和解压缩zip文件
介绍 Java提供的java.util.zip包只支持zip和gzip.至于更多格式的压缩可以选择apache的Commons Compress. 参考:https://o7planning.org/ ...
- leetcode - 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入:p = [1,2,3], q = [1 ...
- pikachu SQL-inject insert/update注入
insert 注入 (修改信息处是update注入,和此处同理) 注册页面,用户处输入 1' 发现报错信息 You have an error in your SQL syntax; check th ...
- mongodb(2022)
了解 文档数据库MongoDB用于记录文档结构的数据,如JSON.XML结构的数据.一条文档就是一条记录(含数据和数据结构),一条记录里可以包含若干个键值对.键值对由键和值两部分组成,键又叫做字段.键 ...
- ubantu中安装redis及遇到的问题
安装命令 sudo apt-get install redis-server 开启远程连接 找到vi /etc/redis/redis.conf文件修改如下 bind 127.0.0.1 为 0.0. ...
- EL表达式处理字符串
示例 JSP页面页头添加 <%@ taglib uri="/WEB-INF/taglib/c.tld" prefix="c"%> <%@ ta ...
- Fasfdfs搭建
目录 介绍 参考 tracker-server: storage-server: group: meta data: 部署 FastDfs服务架构图 本地部署服务 安装 libfastcommon 和 ...
- 【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
问题描述 Azure Event Hub支持 kafka,所以为了测试消息生产者所在环境与Azure Event Hub之间发送消息的性能如何,特别使用 kafka 官方测试生产者,消费者的性能工具 ...
- .Net之多语言配置
介绍 支持多语言使网站可以覆盖更广泛的受众. ASP.NET Core 提供的服务和中间件可将网站本地化为不同的语言. 本次示例环境:vs2019.net5 配置 无需引用Nuget包即可实现以下功能 ...