使用 JSONpath 重新创建具有原始键子集的现有对象

Use JSONpath to re-create existing objects with a subset of the original keys

假设我有这样一个对象:

{
   "foo": "bar",
   "baz": "quux",
   "erase": "me",
   "superfluous": true
}

是否可以构造一个 JSON 路径查询,returns 一个只有原始键的子集的新对象,例如,

{
   "foo": "bar",
   "baz": "quux",
}

这种“过滤”的原因是我有一个 json 属性作为 PostgreSQL 中实体的一部分,该实体通常包含一个复杂的 JSON 对象列表。检索所有数据给我大约 5MB 的属性(每个结果行),而对于那个特定的查询,我只需要 JSON 对象的两个属性。

单独使用 json_path_query() 是否可行,还是我需要不同的方法?

没有内置函数,但是很容易写一个:

create function keep_keys(p_input jsonb, p_to_keep text[])
  returns jsonb
as
$$
  select jsonb_object_agg(key, value
  from jsonb_each(p_input) as t(key, value)
  where t.key = any (p_to_keep);
$$
language sql;

这个:

select keep_keys('{"foo": "bar",
                   "baz": "quux",
                   "erase": "me",
                   "superfluous": true}', 
                 array['foo', 'baz']);

Returns: {"baz": "quux", "foo": "bar"}