首页 > 解决方案 > 如何从 postgres 的 jsonb 列中检索多个数据?

问题描述

在 PostgreSQL 数据库中,我有一个名为 .json 的 json 列json。里面的数据如下:

{
    "Version": "0.0.0.1",
    "Items": [
        {
            "Id": "40000000-0000-0000-0000-000000141146",
            "Name": "apple",
            "Score": 64,
            "Value": 1430000
        },
        {
            "Id": "40000000-0000-0000-0000-000000141147",
            "Name": "grapefruit",
            "Score": 58,
            "Value": 1190000
        },
        {
            "Id": "40000000-0000-0000-0000-000000141148",
            "Name": "mango",
            "Score": 41,
            "Value": 170000
        }
    ]
}

我想做的是从元素中检索所有Score数据。Items

我试图使用 SQL 代码:

select
substring(json ->> 'Items' from '"Score": (\d*),') as score
from vegetables;

然而,它只返回第一个元素的分数而不是 3。我试图使用 '\g' 标志,它应该在全局范围内找到所有结果,但代码不起作用。

谁能建议如何正确地做到这一点?提前致谢!

标签: jsonregexpostgresql

解决方案


考虑到json字段的数据类型jsonb不需要使用子字符串或正则表达式,只需lateral joinwithjsonb_array_elements将为您完成所需的事情。试试下面的查询。

select x->>'Score' "Score" from vegetables 
cross join lateral jsonb_array_elements(json->'Items') x

演示


推荐阅读