sql - Postgres函数将两个具有重叠键的json对象合并为一个对象

标签 sql json postgresql postgresql-9.3

我有以下 json 对象:

{
    "a" : {
        "0" : 2,
        "1" : 4,
        "3" : 6,
    }
    "b" : {
        "2" : 8,
        "1" : 10, /*note this key exists in "a" too*/
        "4" : 12,
    }
}

我想生成以下对象,然后能够像这样从中提取元素:

{
        "0" : 2,
        "1" : 10,
        "2" : 8,
        "3" : 6,
        "4" : 12,
}

提取:object->>'1'应该返回 '10'

基本上我有两个数组,它们可能有重叠的键,我想合并这两个数组,让一个数组优先。

我怎样才能做到这一点?理想情况下,我会调用类似 arrayMerge(a, b) 的函数它给了'a'优先级高于 'b'

最佳答案

Postgres 9.5+ 中,您可以简单地使用内置的连接运算符 || 来合并 JSON 对象。

create table test_js(val jsonb);
insert into test_js values ('{"a":{"0":2,"1":4,"3":6},"b":{"1":10,"2":8,"4":12}}');

select (val->'a') || (val->'b') from test_js;
                  ?column?
--------------------------------------------
 {"0": 2, "1": 10, "2": 8, "3": 6, "4": 12}
(1 row)

关于sql - Postgres函数将两个具有重叠键的json对象合并为一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33333161/

相关文章:

mysql - 我是否必须时不时地创建一个特定的非聚集索引?

php - 请求失败 : unacceptable content-type: image/jpg using AFNetworking 2. 5

具有 unique_together 且没有自动递增 id 主键的 Django 模型

sql - 仅当给定查询不存在记录时,如何继续执行下一个任务?

sql - T-SQL;将四个查询合并为一行

objective-c - AFNetworking 2 - 获取错误 json 正文

java - Jackson - 接受对象属性上的空字符串

ruby-on-rails - 如何在 Rails 迁移中设置排序规则

sql - INT或附近的PostgreSQL语法错误

SQL Server - 动态数据透视表