以下举例说明:

postgres=# select '{"b":1,"a":2}'::json;
json
---------------
{"b":1,"a":2}
(1 row)

创建json字段表:

postgres=# drop table if exists test_json1;
NOTICE: table "test_json1" does not exist, skipping
DROP TABLE
postgres=# create table test_json1(id serial primary key,name json);
CREATE TABLE

插入json数据:

postgres=# insert into test_json1(name) values('{"col1":1,"col2":"user1","col3":"male"}');
INSERT 0 1
postgres=# insert into test_json1(name) values('{"col1":2,"col2":"user2","col3":"female"}');
INSERT 0 1
postgres=# select * from test_json1;
id | name
----+-------------------------------------------
1 | {"col1":1,"col2":"user1","col3":"male"}
2 | {"col1":2,"col2":"user2","col3":"female"}
(2 rows)

获取指定key的value值:

postgres=# select name -> 'col2' from test_json1 where id = 1;
?column?
----------
"user1"
(1 row) postgres=# select name ->> 'col2' from test_json1 where id = 1;
?column?
----------
user1
(1 row)

json和jsonb的区别,先看例子:

postgres=# select ' {"a":3 ,"b":1, "a":2}'::json;
json
------------------------
{"a":3 ,"b":1, "a":2}
(1 row) postgres=# select ' {"a":3 ,"b":1, "a":2}'::jsonb;
jsonb
------------------
{"a": 2, "b": 1}
(1 row)

1,jsonb存储的是二进制类型(存储慢,获取快),json是文本类型(存储快,获取慢)。

2,jsonb可以调整键的顺序。
3,jsonb可以删除多余的空格。
4,jsonb可以删除重复的键。
判断字符是否顶层键值。

postgres=# select '{"b":"1","a":"2"}'::jsonb ? 'a';
?column?
----------
t
(1 row)

删除数据的键/值

postgres=# select '{"b":"1","a":"2"}'::jsonb - 'a';
?column?
------------
{"b": "1"}
(1 row)

json函数

1,json_each扩展最外层的json对象成为一组键/值结果集,如下所示:

postgres=# select * from json_each('{"b":"1","a":"2"}');
key | value
-----+-------
b | "1"
a | "2"
(2 rows)

2,json_each_text以文本返回结果,如下所示:

postgres=# select * from json_each_text('{"b":"1","a":"2"}');
key | value
-----+-------
b | 1
a | 2
(2 rows)

3,row_to_json普通表转为json格式:

postgres=# drop table if exists test_copy;
NOTICE: table "test_copy" does not exist, skipping
DROP TABLE
postgres=# create table test_copy as select 1 as id,'a' as name;
WARNING: column "name" has type "unknown"
DETAIL: Proceeding with relation creation anyway.
SELECT 1
postgres=# select * from test_copy where id = 1;
id | name
----+------
1 | a
(1 row) postgres=# select row_to_json(test_copy) from test_copy where id = 1;
row_to_json
---------------------
{"id":1,"name":"a"}
(1 row)

4,json_object_keys返回最外层的json对象中的键的集合

postgres=# select * from json_object_keys('{"b":"1","a":"2"}');
json_object_keys
------------------
b
a
(2 rows)

json键/值的追加“||”

postgres=# select '{"b":"1","a":"2"}'::jsonb||'{"d":"3","c":"4"}'::jsonb;
?column?
------------------------------------------
{"a": "2", "b": "1", "c": "4", "d": "3"}
(1 row)

json键/值的删除“-”

postgres=# select '{"b":"1","a":"2"}'::jsonb - 'a';
?column?
------------
{"b": "1"}
(1 row)

删除嵌套json数据“#-”

postgres=# select '["a","b","c"]'::jsonb - 0;
?column?
------------
["b", "c"]
(1 row) postgres=# select '{"name":"bob","contact":{"phone1":"1234","phone2":"5678"}}'::jsonb #- '{contact,phone1}'::text[];
?column?
------------------------------------------------
{"name": "bob", "contact": {"phone2": "5678"}}
(1 row) postgres=# select '{"name":"bob","contact":["phone1","phone2","phone3"]}'::jsonb #- '{contact,0}'::text[];
?column?
--------------------------------------------------
{"name": "bob", "contact": ["phone2", "phone3"]}
(1 row)

json值的更新,jsonb_set函数,
格式:jsonb_set(target jsonb,path text[],new_value jsonb[, create_missing boolean])
target指源jsonb数据,path指路径,new_value指更新后的键值,create_missing值为true表示键不存在则添加,为false表示如果键不存在则不添加

postgres=# select jsonb_set('{"name":"bob","age":"27"}'::jsonb,'{age}','"28"'::jsonb,false);
jsonb_set
------------------------------
{"age": "28", "name": "bob"}
(1 row) postgres=# select jsonb_set('{"name":"bob","age":"27"}'::jsonb,'{age}','"28"'::jsonb,true);
jsonb_set
------------------------------
{"age": "28", "name": "bob"}
(1 row) postgres=# select jsonb_set('{"name":"bob","age":"27"}'::jsonb,'{sex}','"male"'::jsonb,false);
jsonb_set
------------------------------
{"age": "27", "name": "bob"}
(1 row) postgres=# select jsonb_set('{"name":"bob","age":"27"}'::jsonb,'{sex}','"male"'::jsonb,true);
jsonb_set
---------------------------------------------
{"age": "27", "sex": "male", "name": "bob"}
(1 row)

参考:
https://www.postgresql.org/docs/9.4/functions-json.html

pg的json类型的更多相关文章

  1. PG 中 JSON 字段的应用

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

  2. springmvc接收JSON类型的数据

    1.在使用AJAX传递JSON数据的时候要将contentType的类型设置为"application/json",否则的话会提示415错误 2.传递的data需要时JSON类型的 ...

  3. SpringMVC——对Ajax的处理(包含 JSON 类型)

    一.首先要搞明白的一些事情. 1.从客户端来看,需要搞明白: (1)要发送什么样格式的 JSON 数据才能被服务器端的 SpringMVC 很便捷的处理,怎么才能让我们写更少的代码,如何做好 JSON ...

  4. Struts2+Jquery实现ajax并返回json类型数据

    来源于:http://my.oschina.net/simpleton/blog/139212 摘要 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的 ...

  5. JSON.stringify实例应用—将对象转换成JSON类型进行AJAX异步传值

    在上一篇中,对JSON.stringify()方法有了初步的认识,并且做了一些简单的例子.本篇将进一步将JSON.stringify用在复杂些的实例中,例如如下需求: 在进jQuery AJAX异步传 ...

  6. 已知json类型根据类型封装集合

    1编写帮助类根绝url得到json public static string Post(string url) { string strURL = url; //创建一个HTTP请求 HttpWebR ...

  7. 转载:Struts2+Jquery实现ajax并返回json类型数据

    摘要: 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数 ...

  8. json进阶(一)js读取解析JSON类型数据

    js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...

  9. HTML基础之JS中的序列化和反序列化-----字符串的json类型与字典之间的相互转换

    前端向后端传递数据的时候不能直接传递对象(如,字典),只能发字符串,Jason就是一种字符串所以前端向后端发送数据的时候,需要将对象转换成字符串 如果前端向后端发送的是json类型,需要通过JSON. ...

  10. mysql 5.7 laravel json类型数据相关操作

    2018年10月16日18:14:21 官方文档中文翻译版 原文:https://dev.mysql.com/doc/refman/5.7/en/json.html 最后有部分实例和一个小总结 11. ...

随机推荐

  1. HCIA-基础实验FIN-综合网络部署考核

    HCIA-基础实验FIN-综合网络部署考核 虽然我选择通过自学hcia并跳过hcia培训直接学习hcip, 但是这个基础实验课程的考核总归还是处理掉比较好, 趁现在能挤出时间(笑). 1 实验需求 1 ...

  2. fetch,axios简介与语法

    fetch简介&语法 留心:像之前的XMLHttpRequest 但并不真的是,而是代替的 #概念:fetch是ecma组织基于promise开发http api ,用来代替xhr  #语法: ...

  3. 使用pyspark 建立spark 的累加器

    一,累加器特征 1,PySpark累加器是一个共享变量,与RDD和DataFrame一起使用,以执行与Map reduce计数器类似的求和和和计数器操作. 2,只有分布在各个节点上的task任务才能更 ...

  4. Java的引用(强软弱虚)

    Java中引用相关的类 类 名 说明 ReferenceQueue 引用队列 与某个引用类绑定,当引用死亡后会进入这个队列对象标记为垃圾(并不代表回收了)后或虚引用的对象被回收后,会加入到引用队列 H ...

  5. 快速傅里叶变换详解(FFT)

    自己也看了几篇博客,但是对我这种不擅长推导小白来说还是有一点困难,所以自己也写一篇博客也为像我一样的小白提供思路.以下内容包含各种LaTeX渲染,如果哪里有错误欢迎大家评论留言,或者添加本人qq:14 ...

  6. gin框架笔记

    1.实现http://127.0.0.1:8080/index.html的形式访问前端页面.gin-contrib/static 使用中间件的方式判断是否存在该静态文件.fileserver 是一个 ...

  7. 打开IE浏览器被强制跳转至edge

    打开edge浏览器,右上角更多,设置,默认浏览器,设置"从不" 控制面板,Internet选项,高级,浏览,取消勾选"启用第三方浏览器扩展"

  8. Elasticsearch 实战

    需求 假设现在有这么一个需求,系统接了很多的报文,需要提供全文检索,为了简化,报文目前只有类型,流水号,内容这三个字段. 索引设计 建立msg索引,映射规则如下 PUT /msg { "ma ...

  9. R语言MCMC-GARCH、风险价值VaR模型股价波动分析上证指数时间序列

    全文链接:http://tecdat.cn/?p=31717 原文出处:拓端数据部落公众号 分析师:Ke Liu 随着金融市场全球化的发展,金融产品逐渐受到越来越多的关注,而金融产品的风险度量成为投资 ...

  10. YieldReturn语法解析

    /* * * 学习Yield Return 语法 * 使用两个方法,显示1 - 100之间的全部偶数 * * */ using System;using System.Collections.Gene ...