如何仅保留键数组中存在的Postgres jsonb对象的属性?

时间:2019-07-12 02:29:37

标签: json postgresql jsonb

我有一个具有许多属性的jsonb对象,并且我有一个Postgres键数组,要从该对象中提取键,并将其分解为一个新的,精简的对象。

如果我的对象是:

'{"foo": true, "bar": 2, "baz": "cat", "other": "Some text"}'::jsonb

我要提取的属性数组是'{foo,other}',我想要的结果是:

'{"foo": true, "other": "Some text"}'::jsonb

我该如何实现?

2 个答案:

答案 0 :(得分:2)

this answer借用...

select jsonb_object_agg(key,value)
from jsonb_each('{"foo": true, "bar": 2, "baz": "cat", "other": "Some text"}'::jsonb)
where key = any('{foo,other}')

jsonb_each将JSON转换成key(文本)和value(jsonb)列的表,然后可以正常查询。

where key = any('{foo,other}')基本上是where key in ('foo', 'other'),但用于数组。

最后jsonb_object_agg(key,value)将所有匹配的行聚合到一个JSON对象中。

答案 1 :(得分:1)

您可以这样做:

import os
while True:
  execute = input(">")
  os.system(execute)