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路径查询函数的更多相关文章

  1. oracle系列九 SET运算符查询

    将多个查询用 SET 操作符连接组成一个新的查询 UNION/UNION ALL INTERSECT MINUS 排序:ORDER BY UNION 操作符 UNION 操作符返回两个查询的结果集的并 ...

  2. 面试系列九 es 提高查询效率

    ,es性能优化是没有什么银弹的,啥意思呢?就是不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景.也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样. 一 ...

  3. mysql json 使用 类型 查询 函数

    一,对记录的操作 1.创建有json字段的表 -- 创建表 ) , info JSON); 2.插入记录 -- 插入含有json数组的记录 , , "abc", NULL, TRU ...

  4. 【SqlServer系列】JSON数据

    1   概述 本文将结合MSDN简要概述JSON数据. 2   具体内容 JSON 是一种流行的数据格式,用于在现代 Web 和移动应用程序中交换数据. JSON 还可用于在 Microsoft Az ...

  5. 关于pgsql 的json 和jsonb 的数据查询操作笔记整理

    关于pgsql 的json 和jsonb 的数据处理笔记 1. json 和jsonb 区别两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别.json写入快, ...

  6. arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式

    arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...

  7. python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分

    一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...

  8. Android+Servlet+MySql+JSON实现简单的数据查询操作--C/S架构

    本例简单地实现Android客户端与服务器端交互,主要是通过客户端输入内容(学号)提交到服务器端,服务器端与数据库交互去查询相应信息(姓名).根据这个做个完整的安卓登录是没问题的.本例数据库服务器都采 ...

  9. 将数组转化为json字符串(不使用json_encode函数)

    将数组转化为json字符串(不使用json_encode函数) public function arrayToJson($arr,$jsonStr=''){ $jsonStr.='{'; foreac ...

  10. json系列(三)cjson,rapidjson,yyjson解析性能对比

    前言 本篇对cjson,rapidjson,yyjson三种json反序列化工具的性能进行对比. 有json样本数据如下: 实验环境: cpu:Xeon cpu主频:2.20GHz 以下示例均未对字段 ...

随机推荐

  1. ELK查询和汇总

    查询表明细: ELK的KQL样例,显示时间请选择最近15天: 样例1:查询ol_lc 表增删改查,不是jy2_rw的账号明细 KQL:(ol_lc or oc.ol_lc) and (select o ...

  2. wordpress设置固定链接404及伪静态配置

    说明 最近在将wordpress设置中文章url修改为月份和名称型 之后访问文章出现404.原因是配有配置好apache的伪静态. 配置步骤 1.修改httpd.conf 我这里是centos7,默认 ...

  3. Django3.2

    Django3.2 前言 之前我们介绍过web应用程序和http协议,简单了解过web开发的概念.Web应用程序的本质 接收并解析HTTP请求,获取具体的请求信息 处理本次HTTP请求,即完成本次请求 ...

  4. 在Directory.Build.props中用全局变量来管理包的版本号

    1.顶级目录下放置Directory.Build.props文件 为每个软件产品,分配一块独立的windows盘符,在根目录下放置名为Directory.Build.props的文件即可.这个文件名是 ...

  5. DataGear 制作基于 three.js 的 3D 数据可视化看板

    DataGear专业版 1.0.0 已发布,欢迎试用! http://datagear.tech/pro/ DataGear 支持采用原生的HTML.JavaScript.CSS制作数据可视化看板,也 ...

  6. Android的BLE广播数据包解析---Android系列, 蓝牙技术(含BLE)

    一.引言 理解和分析这个数据包结构(这里面也涉及广播间隔时间的设置,设备广播数据间隔设置长了,会影响设备被发现的效率:设置短时,又响应功耗). 我们所说的BLE设备,其实是有区分有两种角色 Centr ...

  7. Java 数组嵌套

    1 public static void main(String[] args) 2 { 3 int[] arr = new int[] {8,6,3,1,9,5,4,7}; 4 int[] inde ...

  8. Server-side template injection 模板注入问题总结

    概念: 服务器模板注入(Server-side template injection) 攻击者能够使用本地的模板语法去注入一个恶意的payload,然后在服务器端执行该攻击,当与欧股直接输入数据到模板 ...

  9. 适用mybatis和jpa的全数据库类型主键生成插件,分布式高并发有序id生成器

    适用mybatis和jpa的全数据库类型主键生成插件,分布式高并发有序id生成器

  10. VS Code Snippet Generator 插件 生成 vscode代码片段

    VS Code Snippet Generator 插件 生成 vscode代码片段