最新的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 字段数据的直接查询的更多相关文章

  1. mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?

    需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...

  2. 【mysql】mysql5.7支持的json字段查询【mybatis】

    mysql5.7支持的json字段查询 参考:https://www.cnblogs.com/ooo0/p/9309277.html 参考:https://www.cnblogs.com/pfdltu ...

  3. Django 1.8.11 查询数据库返回JSON格式数据

    Django 1.8.11 查询数据库返回JSON格式数据 和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 环境 Win10 Python2.7 Django 1.8.11 返回多 ...

  4. PG 中 JSON 字段的应用

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

  5. Jqgrid入门-结合Struts2+json实现数据展示(五)

    DEMO用的是ssh框架实现的,具体怎么搭建的就不多做说明了.分页表格的数据操作难点就是数据展现.至于增删改直接用hibernate原生的方法实现即可.         初步分析:表格要实现分页,那么 ...

  6. 移动商城第八篇【添加商品之基本属性和大字段数据(FCK文本编辑器)】

    添加商品 修改对应的超链接url,controller转发到对应的JSP页面 <a href="${path}/item/toAddItem.do" class=" ...

  7. JqGrid 自定义子表格 及 自定义Json 格式数据不展示

    项目第一次使用JqGrid ,发现功能强大,但由于对他不熟悉,也没有少走弯路,记录一下. 1.引用 <link href="~/Scripts/JqGrid/jqgrid/css/ui ...

  8. MySQL JSON 类型数据操作

    1.Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在 ...

  9. MySQL中JSON字段的使用技巧

    mysql5.7.8之后开始原生支持json. 在类似mongodb这种nosql数据库中,json存储数据是非常自然的, 在mysql中合理的使用json,能够带来极大的便利 Json字段的使用场景 ...

随机推荐

  1. 因权限引起的svn提交失败的错误及其解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 前段时间,一个网友发邮件向我请教一个svn提交失败的错误.他的具体错误是这样的: 在配置svn强制输入日志时候遇到一个 ...

  2. 封装springmvc处理ajax请求结果

    原文链接:http://blog.csdn.net/qq_37936542/article/details/79064818 需求描述:ajax向后台发起请求,springmvc在处理完请求后返回的结 ...

  3. PHP移动互联网开发笔记(4)——自定义函数及数组

    一.自定义函数 自定义函数就是我们自己定义的函数,在PHP中自定义函数格式如下: function funname(arg1, arg2, arg3......){ //TODO return val ...

  4. 正則表達式基础及java使用

    正則表達式基础 正則表達式语法(1)     普通字符:字母,数字.汉子,下划线以及没有特殊定义的标点符号都是"普通字符".表达式中的普通字符.在匹配一个字符串的时候,匹配与之同样 ...

  5. Oracle数据库sqlplus与plsqldev解决乱码

    (出现乱码 解决方法留存) 问题描述 : 在用eclipse使用jdbc插入中文数据的时,数据用plsqldev查询时,正常显示中文,但是用sqlplus查询时,为中文乱码,当用plsqldev直接插 ...

  6. WPF 针对数据源某个属性进行排序

    原文:WPF 针对数据源某个属性进行排序 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wanlong360599336/article/detai ...

  7. 【t004】切割矩阵

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 给你一个矩阵,其边长均为整数.你想把矩阵切割成总数最少的正方形,其边长也为整数.切割工作由一台切割机器完 ...

  8. js精确判断数据类型为何用Object.prototype.toString.call()而不是Object.prototype.toString()

    有何区别,为何一定要通过call. 我们知道call是用来改变函数作用域的,Object.prototype.toString.call在这儿也是用来改变作用域的. Object.prototype. ...

  9. 《Head First 设计模式》学习笔记——命令模式

    在软件系统,"行为请求者"与"行为实施者"通常存在一个"紧耦合".但在某些场合,比方要对行为进行"记录.撤销/重做.事务" ...

  10. TstringBuilder Delphi2007版

    2010中的StringBuilder对象用的比较爽快!于是稍作了一些修改(增加了几个函数和属性)然后移植到D2007中来使用了!效果不错,共享一下! unit DxStringBuilder; in ...