下表列出了常用的json数据类型操作符:

操作符 操作符右侧数据类型 返回类型 描述
-> int json or jsonb 获得 JSON 数组元素(索引从 0 开始,负整数从末尾开始计)
-> text json or jsonb 通过键获得 JSON 对象域
->> int text 以text形式获得 JSON 数组元素
->> text text 以text形式获得 JSON 对象域
#> text[] json or jsonb 获取在指定路径的 JSON 对象
#>> text[] text 以text形式获取在指定路径的 JSON 对象
构建测试数据
CREATE TABLE student (stu_id serial NOT NULL PRIMARY KEY,stu_info json NOT NULL);
INSERT INTO student (stu_info)
VALUES
(
'{
"name": "lisi",
"information":
{
"mobile_number": "13700000001",
"branch": "Computer",
"rank":12
}
}'
),
(
'{
"name": "zhangsan",
"information":
{
"mobile_number": "13700000002",
"branch": "Computer",
"rank":1
}
}'
),
(
'{
"name": "zhouxinxin",
"information":
{
"mobile_number": "13700000003",
"branch": "Car",
"rank":2
}
}'
),
(
'{
"name": "lilei",
"information":
{
"mobile_number": "13700000004",
"branch": "Civil",
"rank":6
}
}'
);
INSERT INTO student (stu_info) --数组类型的json
VALUES
(
'[{
"name": "wanwu"},
{"information":
{
"mobile_number": "13700000005",
"branch": "Computer",
"rank":11
}
}]'
)

1.使用索引来获取学生名字(返回的json类型的数据)

test=# SELECT stu_info ->0 AS StudentName FROM student;
studentname
------------------ { +
"name": "wanwu"}
(5 行记录)
test=# SELECT stu_info ->0 ->'name' AS StudentName FROM student;
studentname
------------- "wanwu"
(5 行记录)

2.使用json键来获取学生名字(返回的json类型的数据)

test=# SELECT stu_info -> 'name' AS StudentName FROM student;
studentname
--------------
"lisi"
"zhangsan"
"zhouxinxin"
"lilei" (5 行记录)

3.使用json键来获取学生名字(返回的字符串类型的数据)

test=# SELECT stu_info ->> 'name' AS StudentName FROM student;
studentname
-------------
lisi
zhangsan
zhouxinxin
lilei (5 行记录)

4.获取学生的手机号码

test=# SELECT stu_info #>> '{information,mobile_number}' AS phone FROM student;
phone
-------------
13700000001
13700000002
13700000003
13700000004 (5 行记录)

5.在where条件中使用json操作符

test=# SELECT stu_info ->> 'name' AS StudentName FROM student WHERE stu_info -> 'information' ->> 'branch' = 'Computer';
studentname
-------------
lisi
zhangsan
(2 行记录)
test=# SELECT stu_info ->> 'name' AS StudentName FROM student WHERE stu_info #>> '{information,branch}' = 'Computer';
studentname
-------------
lisi
zhangsan
(2 行记录)

‘>>’ 操作符返回的是文本类型的数据,‘>’ 操作符返回的是json/jsonb类型的数据。

操作符右侧使用数字则只对数组类型的json数据有效果,反之亦然。

KingbaseES json操作符的更多相关文章

  1. xpath json操作符说明

    XPath JSONPath Description / $ the root object/element . @ the current object/element / . or [] chil ...

  2. PG 中 JSON 字段的应用

    13 年发现 pg 有了 json 类型,便从 oracle 转 pg,几年下来也算比较熟稔了,总结几个有益的实践. 用途一:存储设计时无法预料的文档性的数据.比如,通常可以在人员表准备一个 json ...

  3. PostgreSQL9.3:JSON 功能增强 根据PQ中文论坛francs 给出的东西结合自己的摸索总结下

     在 PostgreSQL 9.2 版本中已经支持 JSON 类型,不过支持的操作非常有限,仅支持以下函数   array_to_json(anyarray [, pretty_bool]) row_ ...

  4. PostgreSQL中JSON、JSONB基本操作符

    PostgreSQL 9.5以上的版本中有了很多方便的操作符,使得操作 JSON 变得非常方便了. 一. -> 和 ->> : -> 表示获取一个JSON数组元素,支持下标值( ...

  5. KingbaseES 中 JSON 介绍

    KingbaseES支持JSON和JSONB.这两种类型在使用上几乎完全一致,主要区别是 JSON类型把输入的数据原封不动的存放到数据库中.JSONB类型在存放时把JSON解析成二进制格式. JSON ...

  6. KingbaseES 的行列转换

    目录 背景 行转列 数据准备 分组聚合函数+CASE 根据压缩数据的格式,横向展开数据列选取不同方式 crosstab函数 PIVOT 操作符 PIVOT 操作符的限制 工具 ksql 的元命令 \c ...

  7. 4种解决json日期格式问题的办法

    4种解决json日期格式问题的办法   开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下 ...

  8. 在javascript中使用Json

    jSON是JavaScript面向对象语法的一个子集.由于JSON是JavaScript的一个子集,因此它可清晰的运用于此语言中. 文本生成json对象,必须在外面加一对括号. js 代码 var m ...

  9. 高程(3):操作符、for、for...in循环、break/continue/return语句、函数等

    1.关系操作符 注意点:1)比较操作数是两个字符串,是比较字符串的字符编码值. 如:"a" > "b"  返回 false:"a" & ...

  10. JSON相关知识,转载:删除JSON中数组删除操作

    一:JSON是什么 JSONg格式:对象是一个无序的“名称/值”对的集合. 对象以括号开始,括号结束. 名称冒号分隔值. "名称/值"之间用逗号分隔 例: var people = ...

随机推荐

  1. C++中两种获取UUID的方法(编程)

    第一种,依托WMI #define _WIN32_DCOM #include <iostream> using namespace std; #include <comdef.h&g ...

  2. 图书管理系统---基于form组件和modelform改造添加和编辑

    添加 基于form组件改造 步骤1 1.为了区分自己写的form类和视图逻辑,所以工作中需要区分开来,那么就可以在应用下创建一个叫utils的文件夹,专门存放我们写的form类,py文件名随便起 2. ...

  3. 【Azure 云服务】指标哪去了?在执行 Swap (交换生产部署和Staging部署) 操作后看不见云服务的旧指标

    问题描述 打开云服务(Cloud Service)的Metrics页面,发现过去了指标不见了? 以虚点构成无数据的图表. 问题解答 查看云服务的活动日志(Activity Logs),发现最近执行的操 ...

  4. 【Azure 应用服务】App Service多个部署槽(Slot)之间,设置Traffic百分比后,如何来判断请求是由那一个槽(Slot)来进行处理呢?

    问题描述 当我们部署应用到App Service后,为了实现对生成的最小影响,通常是把新版本部署在一个预生产的槽中,然后进行验证.另一方面,为了进行A/B验证,需要把生成槽的流量,切入一部分到预生产槽 ...

  5. Nebula Operator 云上实践

    本文首发于 Nebula Graph Community 公众号 嗨,大家好!Nebula Operator 开源也有一段时间了,之前也有一篇相关的博客介绍,但是实践相关的博客却还没有,现在: 它来了 ...

  6. 协程的async使用

    async与launch一样都是开启一个协程,但是async会返回一个Deferred对象,该Deferred也是一个job async函数类似于 launch函数.它启动了一个单独的协程,这是一个轻 ...

  7. rust简要笔记

    第一个程序, 我们不用安装编辑器,直接在现成的网页编辑器上运行  https://play.rust-lang.org/

  8. 使用 Docker 部署 MrDoc 在线文档管理系统

    1)MrDoc 介绍 MrDoc 简介 MrDoc 觅思文档:https://mrdoc.pro/ MrDoc 使用手册:https://doc.mrdoc.pro/p/user-guide/ MrD ...

  9. confluence 破解系列

    confluence 破解系列 目录 confluence 破解系列 前言 confluence 一. 安装数据库mysql 二 docker启动confluence 前言 confluence Co ...

  10. 孔夫子旧书网书籍信息得爬取并保存为json,csv,excel多种文件格式

    python版本:3.7 需要得引入得包: from selenium import webdriver from selenium.common.exceptions import TimeoutE ...