关于JSON 字段数据的直接查询
最新的pgSQL 对json的支持在进一步加强!虽然我也学了那么点皮毛,但是json数据对于WEB的开发确实很重要,苦苦学习了很长一段时间,不断的关系PGSQL的动向!
好在翻看很多高人的例子和介绍,终于自己总结了一下pgSQL对于json的查询
在以往存在于数据库中的大对象或者一串字符串,想要根据其内容来查找数据几乎是不可能的,之前做的项目就是用XML转成大对象之后存在SQL SERVER里,但是对于查询还是要
到前台之后拆开数据才可以,这样就成了这次的项目完全就是体验了下XML复杂的树杈功能,对于数据集合、整理没有丝毫进步
后来接触了pgSQL,从刚开始的JSON输出,到现在的直接查找数据以及直接拼接JSON,到这里,我觉得有必要推翻自己以前的一些想法来弄点新东西出来,故再次做个笔记总结
{更新记录
---20150614 数组
}
下这段时间来的所学,代码都是网上复制的,懒惰呀。。。。再次感谢分享代码的大大!!
一张表
CREATE TABLE job
(
jobid SERIAL primary key ,
jobdesc json
)
然后在里面弄点数据
insert into job(jobdesc) values('{
"jobname":"linux_os_vmstat",
"schedule":{
"type":{"interval":
"5m"
},
"start":"now",
"end":"None"
},
"values":{
"event":["cpu_r","cpu_w"],
"data":["cpu_r"],
"threshold":[1,1]
},
"objects":{
"wintest1":"cpu"
}
}');
insert into job(jobdesc) values('{
"jobname":"Oracle_tbs_space",
"schedule":{
"type":{"interval":
"1d"
},
"start":"now",
"end":"None"
},
"values":{
"event":["used"],
"data":["used"],
"threshold":["90%"]
},
"objects":{
"wintest1":"oradb1"
}
}');
遇上的json串已经复杂的很多了,实际应用我觉的没有必要这么复杂,至少我用不上
首先是返回指定数据:
# select jobdesc->>'jobname' as jobname from job where jobdesc->'objects'->>'wintest1' like 'oradb1';
jobname
------------------
oracle_tbs_space
(1 行记录)
以上可以看出 jobdesc->'objects'->>'wintest1' 这个部分就是指向摸个json数据节点的
对于符号的解释其实我也不是很懂,高手是这么说的:
->(返回对象类型)
->>(返回字符型)
#>>(选择数组类型)
反正这里可以直接指向某个json数据的节点作为where来返回条件了
由于还可以对数组元素选择,用的符号是#>>
# select jobdesc->'values'#>>'{event,0}' as value1 from job where jobdesc->>'jobname' = 'linux_os_vmstat';
value1
--------
cpu_r
(1 行记录)
event,0 意思就是 event数组的0位置的值
经过测试 支持 二维数组 如 event= "event":[["cpu_r"],["cpu_w"]]
用'{event,0,0}' 可以访问到 0 ,0 位置的值 cpu_r
---------------------------
然后是更新记录
#update job set jobdesc = '{
"jobname":"linux_os_vmstat",
"schedule":{
"type":{"interval":
"5m"
},
"start":"now",
"end":"None"
},
"values":{
"event":["cpu_r","cpu_w"],
"data":["cpu_r"],
"threshold":[1,2]
},
"objects":{
"wintest1":"cpu"
}
}' where jobdesc->>'jobname' = 'linux_os_vmstat';
UPDATE 1
# select jobdesc->'values'#>>'{threshold,1}' as threshold2 from job
where jobdesc->>'jobname' = 'linux_os_vmstat';
threshold2
------------
2
(1 行记录)
更新json类型字段时必须整个字段都更新,无法采用指定内部特定值方法更新。
删除记录其实也是同理的:
delete from job where jobdesc->>'jobname' = 'linux_os_vmstat';
而后自己做了个实验
在 jobdesc 插入数据
一:{"a":"9","b":"2","c":"3","d":"4"}
二:{"a":"1","b":"2","c":"3","d":"4"}
select jobdesc->>'a' from job where jobdesc ->>'a' = '1'
返回1
select jobdesc from job where jobdesc ->>'a' = '1'
返回 {"a":"1","b":"2","c":"3","d":"4"}
由于目地已经达到了!
关于JSON 字段数据的直接查询的更多相关文章
- mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?
需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...
- 【mysql】mysql5.7支持的json字段查询【mybatis】
mysql5.7支持的json字段查询 参考:https://www.cnblogs.com/ooo0/p/9309277.html 参考:https://www.cnblogs.com/pfdltu ...
- Django 1.8.11 查询数据库返回JSON格式数据
Django 1.8.11 查询数据库返回JSON格式数据 和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 环境 Win10 Python2.7 Django 1.8.11 返回多 ...
- PG 中 JSON 字段的应用
13 年发现 pg 有了 json 类型,便从 oracle 转 pg,几年下来也算比较熟稔了,总结几个有益的实践. 用途一:存储设计时无法预料的文档性的数据.比如,通常可以在人员表准备一个 json ...
- Jqgrid入门-结合Struts2+json实现数据展示(五)
DEMO用的是ssh框架实现的,具体怎么搭建的就不多做说明了.分页表格的数据操作难点就是数据展现.至于增删改直接用hibernate原生的方法实现即可. 初步分析:表格要实现分页,那么 ...
- 移动商城第八篇【添加商品之基本属性和大字段数据(FCK文本编辑器)】
添加商品 修改对应的超链接url,controller转发到对应的JSP页面 <a href="${path}/item/toAddItem.do" class=" ...
- JqGrid 自定义子表格 及 自定义Json 格式数据不展示
项目第一次使用JqGrid ,发现功能强大,但由于对他不熟悉,也没有少走弯路,记录一下. 1.引用 <link href="~/Scripts/JqGrid/jqgrid/css/ui ...
- MySQL JSON 类型数据操作
1.Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在 ...
- MySQL中JSON字段的使用技巧
mysql5.7.8之后开始原生支持json. 在类似mongodb这种nosql数据库中,json存储数据是非常自然的, 在mysql中合理的使用json,能够带来极大的便利 Json字段的使用场景 ...
随机推荐
- html5的float属性超详解(display,position, float)(文本流)
html5的float属性超详解(display,position, float)(文本流) 一.总结 1.文本流: 2.float和绝对定位都不占文本流的位置 3.普通流是默认定位方式,就是依次按照 ...
- [SQL]远程使用PostgreSQL Studio可视化查看PostgreSQL数据库
1.下载 前往官网地址下载最新的PostgreSQL Studio,我下载的是 pgstudio_1.2-bin .zip,由于我的电脑里面没有tomcat. 假设电脑里有配置好tomcat,能够下载 ...
- echart.gl.js实现动态3D柱状图
echart.gl.js实现动态3D柱状图 一.总结 一句话总结:演示页面的源代码里面一定有所需的所有的js. 二.[js实践篇]——echart.gl.js实现动态3D柱状图 前言 本公司的项目需求 ...
- python 使用顺序表实现栈和队列
栈: # -*- coding: utf-8 -*- # @author: Tele # @Time : 2019/04/24 下午 2:33 # 采用list(顺序表)实现栈结构,后入先出 clas ...
- 监控Nginx服务的Shell脚本
Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 我们一台支付机,偶尔会出现以下情况的:php-cg ...
- angularjs1.6 制作流程图,启动流程,流程设置
话不多说,我们先来看一下效果图: 点击添加按扭要增加一个,可以叠加 代码如下: server.server().addprojectrooml({ type: , processName: $scop ...
- noip刷题记录 20170823
独木桥 怎么说呢 #include<iostream> #include<cstdio> #include<algorithm> using namespace s ...
- 一起学Python:列表介绍
列表介绍 想一想: 前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢? 定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗? 答: 列表 <1&g ...
- 微信小程序实例:实现tabs选项卡效果
最近微信应用号是炒的如火如荼,热门满满,但是也可以发现搜索关键词出来,各类网站出现的还都是微信的官方文档解释.正好赶上这个热潮,这几天先把小程序技术文档看了个遍,就直接着手写案例了.很多组件微信内部已 ...
- instsrv.exe用法
这个小工具是用以安装和卸载可执行的服务和指派服务名给这些可执行的服务的. 一:绑定程序和服务 这里我们设定要将F:\cpu.exe 以 abc 的名称显示作为服务的话,我们应当这样子做: 在开 ...