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. Java压缩和解压缩zip文件

    介绍 Java提供的java.util.zip包只支持zip和gzip.至于更多格式的压缩可以选择apache的Commons Compress. 参考:https://o7planning.org/ ...

  2. logback日志组件使用案例

    关于logback: http://www.cnblogs.com/warking/p/5710303.html 官方文档 使用logback: idea创建maven项目 修改pom.xml添加依赖 ...

  3. vue+jsPlumb制成的流程图项目

    本项目参考:https://github.com/wangduanduan/visual-ivr 主页面如下:

  4. C++ 多线程的错误和如何避免(7)

    要以相同顺序获取多个锁 多线程在加锁解锁时,可能会出现死锁问题,比如, 线程 1 在加锁 mutex A 后,继续尝试获取 mutex B,而 mutex B 已经被线程 2 获取,而线程 2 在等待 ...

  5. win32 - QueryDisplayConfig的使用

    QueryDisplayConfig函数检索关于所有显示设备的所有可能的显示路径,或视图,在当前设置的信息. C++样本: (开箱即用) 代码列出了所有显示器的名称和拓展模式 #include < ...

  6. golang微服务实践:分布式链路追踪系统-jaeger安装与简单使用

    简介 jaeger是一个比较有名的分布式链路追踪系统,底层用golang实现,兼容opentracing标准. 文档地址:docs github地址:github 官网:website blog:bl ...

  7. h5页面在微信打开,ios底部存在返回横条的问题

    我的问题比较简单,一个处理链接的页面,二次跳转进入真正的页面,导致ios出现返回横条,点击后退回到了处理链接页面.因为这个后退不会重新加载,导致一直处在处理链接的这个空页面. 所以我用replace代 ...

  8. RK3588开发笔记(一):基于方案商提供的宿主机交叉编译Qt5.12.10

    前言   rk3588开发车机,方案上提供的宿主机只是编译rk sdk的版本,并未编译好Qt,那么需要自行交叉编译Qt系统.选择的Qt的版本为5.12.10.   宿主机准备   下载并打开宿主机,只 ...

  9. error接口

    // 实际上它是interface类型,这个类型有一个返回错误信息的单一方法: type error interface{ Error() string } 创建一个error最简单的方法就是调用er ...

  10. 微信小程序:接手项目,修bug

    好家伙,   问题描述如下: 小程序主界面,选择快速上传会议记录 选择快速 其中,没有2022-2023第二学期,所以,新的会议记录无法上传 于是,我自愿修复这个bug 由于我们没有产品文档 我只能由 ...