首页 > 其他分享 >KingbaseES Json 系列九:Json路径查询函数

KingbaseES Json 系列九:Json路径查询函数

时间:2023-02-23 19:56:43浏览次数:37  
标签:jsonb JSON 查询 Json jsonvarchar query path KingbaseES select

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 行记录)

标签:jsonb,JSON,查询,Json,jsonvarchar,query,path,KingbaseES,select
From: https://www.cnblogs.com/kingbase/p/17139800.html

相关文章

  • KingbaseES Json 系列八:Json记录操作函数三
    KingbaseESJson系列八--Json记录操作函数三(JSON_TABLE)JSON数据类型是用来存储JSON(JavaScriptObjectNotation)数据的。KingbaseES为存储JSON数据提供了两种类型:JSO......
  • KingbaseES Json 系列七:Json记录操作函数二
    KingbaseESJson系列七--Json记录操作函数二(JSONB_POPULATE_RECORD,JSONB_POPULATE_RECORDSET,JSON_POPULATE_RECORD,JSON_POPULATE_RECORDSET)JSON数据类型是用来存储......
  • KingbaseES Json 系列六:Json记录操作函数一
    KingbaseESJson系列六--Json记录操作函数一(JSONB_TO_RECORD,JSONB_TO_RECORDSET,JSON_TO_RECORD,JSON_TO_RECORDSET)JSON数据类型是用来存储JSON(JavaScriptObjectN......
  • KingbaseES Json 系列五--Json数据操作函数三
    KingbaseESJson系列五:Json数据操作函数三(JSONB_SET,JSONB_INSERT,JSON_QUERY)JSON数据类型是用来存储JSON(JavaScriptObjectNotation)数据的。KingbaseES为存储JSON......
  • KingbaseES Json 系列十二:Json其他函数
    KingbaseESJson系列十二--Json其他函数(JSONB_TYPEOF,JSON_SCALAR,JSON_SERIALIZE,JSON_TYPEOF,JSON_VALUE)JSON数据类型是用来存储JSON(JavaScriptObjectNotation)数......
  • KingbaseES Json 系列十一:Json数组操作函数
    KingbaseESJson系列十一--Json数组操作函数(JSONB_ARRAY_ELEMENTS,JSONB_ARRAY_ELEMENTS_TEXT,JSONB_ARRAY_LENGTH,JSON_ARRAY_ELEMENTS,JSON_ARRAY_ELEMENTS_TEXT,JSON_......
  • MySQL查询(三)——连接查询
    MySQL查询(三)——连接查询1.连接查询当查询涉及到多个表的字段时会用到连接查询。笛卡尔乘积现象:表1有m行,表2有n行,结果出现m*n行。笛卡尔乘积现象发生的原因是没有加匹......
  • C#中Linq查询条件动态化
    由于Linq查询主要是强类型查询,所以很难做到像sql语句一样,在执行前可以动态拼接。不过通过方法或者集合方式也可以实现一定的动态化。1.动态的or操作。可以简单的使用list......
  • 【转】package.json 文件解析
     package.json文件解析每个项目的根目录下一般都会有一个package.json文件,这个文件定义了当前项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等)。当......
  • 以docker方式部署的redis键值查询及清理
     1、首先使用 dockerps 命令来查看正在运行的容器。该命令会列出容器的ID、名称、端口号、状态等信息。也可以使用 dockerps-a 命令来查看所有容器,包括已经停止的......