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

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使用示例

JSON_EACH_TEXT

功能:

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

用法:

json_each_text(json)

示例:

参照JSONB_EACH_TEXT使用示例

JSON_OBJECT_KEYS

功能:

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

用法:

json_object_keys(json)

示例:

参照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_TEXT

功能:

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

用法:

jsonb_extract_path_text(from_json json, VARIADIC path_elems text[])

示例:

参照JSONB_EXTRACT_PATH_TEXT使用示例

KingbaseES Json 系列三:Json数据操作函数一的更多相关文章

  1. Jq_Ajax 操作函数跟JQuery 遍历函数跟JQuery数据操作函数

    JQuery文档操作方法 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据. 函数                             ...

  2. 【summary】JQuery 相关css、ajax、数据操作函数或方法

    总结一下JQuery常用的函数方法,更加系统的整理一下. JQuery遍历的一些函数: 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集 ...

  3. Python股票分析系列——基础股票数据操作(一).p3

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...

  4. ORACLE链接SQLSERVER数据库数据操作函数范例

    ORACLE链接SQLSERVER数据库数据操作函数范例 create or replace function FUN_NAME(LS_DJBH IN varchar2 ,LS_ITM varchar ...

  5. hive从入门到放弃(三)——DML数据操作

    上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言. 没看过的可以点击跳转阅读: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--D ...

  6. 每天十分钟系列:JS数据操作之神奇的map()

    Array.prototype.map() map()方法可以创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果. demo1 上面的例子,在控制台中打印的结果是: 1 2 3 ...

  7. Python股票分析系列——基础股票数据操作(二).p4

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第4部分.在本教程中,我们将基于Adj Close列创建烛台/ OHLC图,这将允许我介绍重新采 ...

  8. jQuery 数据操作函数(九)

    .clearQueue() 从队列中删除所有未运行的项目. .data() 存储与匹配元素相关的任意数据. jQuery.data() 存储与指定元素相关的任意数据. .dequeue() 从队列最前 ...

  9. 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面

    一.创建脚本工具并执行初始迁移 在本节中,您将使用包管理控制台(PMC)来更新数据库: •添加VisualStudio Web代码生成包.这个包是运行脚本引擎所必需的. • 执行Add-Migrati ...

  10. Selenium3 + Python3自动化测试系列三——控制浏览器操作

    控制浏览器操作 控制浏览器窗口大小 在测试过程中,我们在打开浏览器后,根据需求可自定义调整浏览器的尺寸大小.WebDriver提供了set_window_size()方法来设置浏览器的大小. 如果页面 ...

随机推荐

  1. 发布Npm包到GitHub Packages

    发布Npm包到GitHub Packages Github集成了GitHub Packages功能,目前提供了Npm.Docker.Maven.NuGet.RubyGems的包管理工具,可以通过Git ...

  2. git bash走代理

    git config --global http.proxy 'http://127.0.0.1:7890' git config --global https.proxy 'http://127.0 ...

  3. 麒麟系统开发笔记(五):制作安装麒麟系统的启动U盘、物理机安装麒麟系统以及搭建Qt开发环境

    前言   电脑从U盘装麒麟系统,搭建实机Qt开发运行环境.   制作麒麟系统U盘(使用LiveUSB) 步骤一:先准备个至少8GB的U盘   之前购买的一批联想U盘,如下图:    查看U盘:   步 ...

  4. java基础字符串---02

    String 概述 String类在java.lang包下,所以使用的时候不需要导包 String类代表字符串,java程序中的所有字符串文字(例如"abc")都被实现为此类的实例 ...

  5. 1.Go 的基本数据类型

    Go 的基本数据类型

  6. 【Azure Redis 缓存】C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间

    问题描述 C#程序是否有对应的方式来优化并缩短由于 Redis 维护造成的不可访问的时间? Redis维护说明: Redis 服务维护时,会把副本节点提升为主节点,且旧主节点关闭现有连接时,这个时候, ...

  7. cw attack

  8. 菜单导航tab切换样式的小技巧

    1.最终效果 2.HTML结构 <div class="licaiMenu"> <ul class="navi"> <li> ...

  9. Jenkins Pipeline:根据参数设置环境变量

    pipeline { agent any environment { //以上自定义的参数 project = "$params.PROJECT" } stages { stage ...

  10. XSS漏洞原理整理

    一.通常使用XSS脚本来获取浏览器版本信息,alert(navigator.userAgnet )  ,浏览器的UserAgent是可以伪造的,比方火狐或者很多扩展都可以屏蔽或者自定义浏览器发送的Us ...