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 以下示例均未对字段 ...
随机推荐
- mysql插入表中的中文字符显示为乱码或问号的解决方法
mysql中文显示乱码或者问号是因为选用的编码不对或者编码不一致造成的,最简单的方法就是修改mysql的配置文件my.cnf.在[mydqld]和[client]段加入 default-charact ...
- OCP试题解析之053-16 MEMORY_TARGET
16.Setting which of the following initialization parameters enables Automatic Memory Management? A. ...
- DVWA XSS
XSS Store hign level <?php if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $message = trim( $_P ...
- MySQL Boolean类型的坑
MySQL中,Boolean只是 tinyint(1) 的别名,也就是说,MySQL中并没有真正的bool类型. 而SQLAlchemy生成SQL的时候并没有检测到 这一点,这就导致一个问题,当使用 ...
- git开发流程图解,本地分支合并,并推送远程分支步骤
本地分支合并,并推送远程分支步骤 1.只有当将修改内容commit后 该修改才完全生效,进行merge前需要将两个分支修改的内容都进行commit 2.假设本地两个分支 用于开发的分支:dev 用于同 ...
- 无所不谈,百无禁忌,Win11本地部署无内容审查中文大语言模型CausalLM-14B
目前流行的开源大语言模型大抵都会有内容审查机制,这并非是新鲜事,因为之前chat-gpt就曾经被"玩"坏过,如果没有内容审查,恶意用户可能通过精心设计的输入(prompt)来操纵L ...
- Unity3D常用方法
1.StartCoroutine(Thread1()) 启动协程运行Thread1()方法. 注意是协程,不是线程,详情见:https://www.jianshu.com/p/6d923cb0c900 ...
- 【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
问题描述 中国区Azure B2C 是否支持手机验证码登录呢? 问题回答 在没有原生 Phone sign-up and sign-in for user flows (中国区不支持,Global A ...
- 【Flink入门修炼】2-1 Flink 四大基石
前一章我们对 Flink 进行了总体的介绍.对 Flink 是什么.能做什么.入门 demo.架构等进行了讲解. 本章我们将学习 Flink 重点概念.核心特性等. 本篇对 Flink 四大基石进行概 ...
- 【对比】Gemini:听说GPT-4你小子挺厉害
前言 缘由 谷歌连放大招:Gemini Pro支持中文,Bard学会画画 事情起因: 一心只读圣贤书的狗哥,不经意间被新闻吸引.[谷歌最新人工智能模型Gemini Pro已在欧洲上市 将与ChatGP ...