如何使用 Postgres 中的动态键从 JSON 获取值

How to get value from JSON with dynamic key in Postgres

以下查询从 jsonb 对象中获取所需的所有键名。基本上,从名为 'objects'.

的列中获取包含 'foo' 的所有键名
SELECT keys
FROM (
    SELECT jsonb_object_keys(objects) as keys
    from table
) as testvalues
WHERE keys LIKE '%foo%';

获得键名集后,我想按如下方式访问该对象的 status 字段

SELECT objects->'hello_foo'->'status' FROM table

但是,我仍然找不到一种方法来遍历第一个查询中的键名集并动态访问 status 字段。

最好的实施方式是什么?

您可以使用 jsonb_each() 将所有元素提取为 key/value 对。然后您可以按 key 过滤并访问 value 对象:

demo:db<>fiddle

SELECT
    *,
    objects.value -> 'status'
FROM
    t,
    jsonb_each(mydata) objects
WHERE objects.key::text LIKE '%foo%'