我有以下 JSON 对象:
{
"a" : {
"0" : 2,
"1" : 4,
"3" : 6,
},
"b" : {
"2" : 8,
"1" : 10, /*note this key exists in "a" too*/
"4" : 12,
}
}
Run Code Online (Sandbox Code Playgroud)
我想生成以下对象,然后能够像这样从中提取元素:
{
"0" : 2,
"1" : 10,
"2" : 8,
"3" : 6,
"4" : 12,
}
Run Code Online (Sandbox Code Playgroud)
提取:object->>'1'应该返回'10'
基本上,我有两个键可能重叠的数组,我想合并这两个数组,给一个数组优先级。
我怎样才能做到这一点?理想情况下,我会调用一个类似的函数arrayMerge(a, b),它的'a'优先级高于'b'
Bru*_*uno 15
如果您使用的是 PostgreSQL 9.5(至少),您可以在类型上使用连接运算符 ( ||)jsonb(如果需要,您可以先转换json为jsonb)。
例如:
WITH test(data) AS (
VALUES ('{
"a" : {
"0" : 2,
"1" : 4,
"3" : 6
},
"b" : {
"2" : 8,
"1" : 10,
"4" : 12
}
}'::jsonb)
)
SELECT (data->'a') || (data->'b') FROM test
Run Code Online (Sandbox Code Playgroud)
将产生:
{"0": 2, "1": 10, "2": 8, "3": 6, "4": 12}
Run Code Online (Sandbox Code Playgroud)
(请注意,在此特定示例中,括号很(data->'a')重要。)
您可以根据要求修改上面的示例以获取特定值,例如:
SELECT (((data->'a') || (data->'b'))->'1')::text::integer FROM test
Run Code Online (Sandbox Code Playgroud)