如何使用PostgreSQL中的JSONB数据类型(一)

  • 时间:
  • 浏览:1
  • 来源:彩神11选5_神彩11选5官方

WITH myInfo AS (select id,realName from TUsers where id = 1 ), -- 一行数据

(

从中国范围来看,JSON搜索热度明显高于XML:

TUsers a where a.id = 1

测试一下:http://localhost:150150/jsonTest/project?action=getmyprojects&userid=1

(SELECT row_to_json(_) from (select a.id, a.realName) as _)

(SELECT array_to_json(array(select row_to_json(myProjects.*) from myProjects),false) as myProjects) b

{

"myprojects":[

{

"id":3,

"title":"测试项目3"

},

{

"id":2,

"title":"测试项目2"

},

{

"id":1,

"title":"测试项目1"

}

],

"id":1,

"realname":"test1"

}

很多综合以上,建议用WITH最好的辦法 ,简洁明了。

SELECT row_to_json(a.*) from (select b.id,b.realName from TUsers b where b.id = 1 ) a

1. 数据库最多只会返回一行数据,后后 转加在JSON对象:如通过用户id获得用户JSON对象

SELECT row_to_json(a.id,a.realName) from TUsers a where a.id = 1

大伙来做个实验:

select c.*,d.* from

SELECT row_to_json(x.*) from

机会使用WITH:

2. 数据库返回多行数据:如获取用户参与的项目

SELECT

WITH myProjects AS (select a.id,a.title from TProject a where a.creatorId = 1)

机会:

运行环境:PG 9.6,WIN8.1 64,Tomcat 8.0,JDK 8

本系列博文讲述使用PG JSON/JSONB类型考虑的疑问,这是第一篇(我尽量写的简单,让初学者跟着做很容易都还可以重复实验),看看不使用JSON/JSONB,仅仅使用row_to_json()函数能帮大伙做哪几种。

DB设计图(在Eclipse用ERMaster反向生成)如下:

WITH myInfo AS (select a.id,a.realName from TUsers a where a.id = 1 )

SELECT row_to_json(b.*) from



PG也从9.2现在结速正式引入JSON类型,那自然就问:

好,JAVA你这个 块,大伙分多种状况来分析:

既然DB支持了JSON和JSON相关函数,是全是 上面服务层(如PHP,JAVA)通过JDBC都还可以直接获取到JSON数据,而不需要再用org.json和json-lib库把后后的行数据进行转换?

正确处理最好的辦法 有:

那机会我获得的全是 a.*,即非要一整行数据(如密码我愿意返回)为何办?如下会报错:

{

"issuccessful":"true",

"data":{

"id":1,

"realname":"test1"

}

}

返回:

from

深蓝色表示JSON的趋势,成明显的上升趋势。

总结一下:

myInfo c,

(SELECT array_to_json(array(select row_to_json(myProjects.*) from myProjects),false) as myProjects) d -- 把多行数据生成一行一列json数组

仅仅使用PG的row_to_json(),即可轻松返回都还可以的各种SQL数据。另一俩个子使得上面层(JAVA/PHP)的代码变得冗杂,不需要org.json和json-lib库再做一次封装,这是架构师要注意的另一俩个重要趋势。

JSON数据类型在当前互联网浪潮中得到了小量的采用,见下图GOOGLE指数对比JSON和XML,从全球范围来看:

注意的是,非要用row()函数,机会无法产生别名,即正如https://www.postgresql.org/docs/9.6/static/functions-json.html里所演示的那样:

3. 返回你这个 表的一行数据,加在你这个 表的多行数据:如获取用户基本信息以及用户参与的项目

上面的核心是SQL:SELECT row_to_json(a.*) from TUsers a where a.id = 1

myProjects AS (select a.id,a.title from TProject a,myInfo b where a.creatorId = b.id) -- 多行数据

返回:

SELECT row_to_json(b.*) from myInfo b

) x

public class UserWS extends HttpServlet :



关于你这个 疑问都还可以参考:http://dba.stackexchange.com/questions/27732/set-names-to-attributes-when-creating-json-with-row-to-json



测试一下,当大伙发送:http://localhost:150150/jsonTest/user?action=getuserinfo&userid=1

该SQL返回: