PostGreSQL 从 9.2 开始增加对 JSON 的支持。9.5 已经支持多个 JSON 函数,见 http://www.postgres.cn/docs/9.5/functions-json.html

关于如何查询返回 JSON,这里 有例子,翻译如下:

一个简单的用法就是使用 row_to_json() 函数,它接受 “行值”并返回 JSON 对象:

select row_to_json(tableName) from tableName;

上面查询语句返回结果类似如下:

{"id":6013,"text":"advancement","pronunciation":"advancement",...}

但是有时候我们只需要查询指定的列,那么我们可以使用 row() 结构函数:

select row_to_json(row(id, text)) from tableName;

上面查询语句返回了我们想要的结果,可惜丢失了列名:

{"f1":6013,"f2":"advancement"}

为了完善这个需求,我们必须创建一个行类型且将结果转换(cast)到这个行类型,或者使用子查询。子查询会更容易一些:

select row_to_json(t)
from (
select id, text from tableName
) AS t

上面查询语句返回了我们希望的样子:

{"id":6013,"text":"advancement"}

另一种常用的技术是 array_agg 和 array_to_json。array_agg 是一个聚合函数 sum 或 count。它聚集成一个 PostgreSQL 数组参数。array_to_json 以 PostgreSQL数组 拼合成一个单一的JSON值。

我们来看看 array_to_json 的用法:

select array_to_json(array_agg(row_to_json(t)))
from (
select id, text from tableName
) AS t

上面查询语句返回了一个由 JSON 对象组成的数组:

  [{"id":6001,"text":"abaissed"},{"id":6002,"text":"abbatial"},{"id":6003,"text":"abelia"},...]

我们来一个复杂的例子(注:这个例子可能有问题):

select row_to_json(t)
from (
select text, pronunciation,
(
select array_to_json(array_agg(row_to_json(d)))
from (
select part_of_speech, body
from definitions
where word_id=words.id
order by position asc
) d
) as definitions
from words
where text = 'autumn'

上面查询语句返回结果如下:

{
"text": "autumn",
"pronunciation": "autumn",
"definitions": [
{
"part_of_speech": "noun",
"body": "skilder wearifully uninfolded..."
},
{
"part_of_speech": "verb",
"body": "intrafissural fernbird kittly..."
},
{
"part_of_speech": "adverb",
"body": "infrugal lansquenet impolarizable..."
}
]
}

Obviously, the SQL to generate this JSON response is far more verbose than generating it in Ruby. Let's see what we get in exchange.(怎么突然蹦出个 Ruby ?)

性能测试

点这里好了

其他 JSON 函数的用法

最新文章

  1. 美国在研新药_读取单个PDF
  2. BZOJ 1251: 序列终结者
  3. Hadoop组件之-HDFS(HA实现细节)
  4. WP8.1 windows phone 8.1 二次退出
  5. Android——课堂整理:assets目录和手机外部存储
  6. html5 实现video标签的自定义播放进度条
  7. 【BZOJ-1208】宠物收养所 Splay
  8. 笔记:C语言数据类型在32位与64位机器上的字节数
  9. Centos中安装PHP的PDO MySQL扩展的教程
  10. YII 数据库,模型,登录验证
  11. 2017-06-20 (pwd ls cd)
  12. Java main方法全解
  13. Java对象之间的深度复制拷贝
  14. QT_文本编辑器_源码下载
  15. Java,JDK动态代理的原理分析
  16. 重学C语言---02C语言概述
  17. 【HubbleDotNet】HubbleDotNet配置安装注册key获取
  18. python框架---->APScheduler的使用
  19. php中错误处理机制
  20. Escape字符总结

热门文章

  1. PHP提取中英文首字母的方法(首字母索引)
  2. python大数据挖掘和分析的套路
  3. ubuntu 使用新添加的用户登录只有$解决方法
  4. D03-R语言基础学习
  5. JavaScript Web API 全选反选案例
  6. git 学习笔记 ---远程仓库
  7. Centos Consul集群及Acl配置
  8. ASP.Net Core 2.1+ Cookie 登录授权验证【简单Cookie验证】
  9. 匿名对象序列化为XML
  10. centos下安装nginx(转载)