postgresql - 在查询中合并连接 JSON(B) 列

使用 Postgres 9.4,我正在寻找一种在查询中合并两个(或更多)jsonjsonb 列的方法。以下表为例:

  id | json1        | json2
----------------------------------------
  1   | {'a':'b'}   | {'c':'d'}
  2   | {'a1':'b2'} | {'f':{'g' : 'h'}}

是否可以让查询返回以下内容:

  id | json
----------------------------------------
  1   | {'a':'b', 'c':'d'}
  2   | {'a1':'b2', 'f':{'g' : 'h'}}

很遗憾,我无法定义 here 中描述的函数.这可以通过“传统”查询实现吗?

最佳答案

在 Postgres 9.5+ 中,您可以像这样合并 JSONB:

select json1 || json2;

或者,如果是 JSON,必要时强制转换为 JSONB:

select json1::jsonb || json2::jsonb;

或者:

select COALESCE(json1::jsonb||json2::jsonb, json1::jsonb, json2::jsonb);

(否则,json1json2 中的任何 null 值都会返回空行)

例如:

select data || '{"foo":"bar"}'::jsonb from photos limit 1;
                               ?column?
----------------------------------------------------------------------
 {"foo": "bar", "preview_url": "https://unsplash.it/500/720/123"}

感谢@MattZukowski 在评论中指出这一点。

https://stackoverflow.com/questions/30101603/

相关文章:

json - 如何在 Mac 上通过命令行安装 JQ?

python - python中的protobuf到json

javascript - 我应该如何在http post请求的请求有效负载中传递json数据

c# - 将对象序列化为 JSON 时循环引用检测到异常

java - Jersey 异常 : SEVERE: A message body reader f

java - Jackson JSON 字段映射大小写?

ios - 如何使用 SwiftyJSON 遍历 JSON?

java - 用于生成和使用 JSON 的 Controller 的 Spring RequestM

ios - waitUntilAllTask​​sAreFinished 错误 Swift

java - 如何用接口(interface)序列化一个类?