json - 如何从 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' 标志,它应该在全局范围内找到所有结果,但代码不起作用。
谁能建议如何正确地做到这一点?提前致谢!
解决方案
考虑到json
字段的数据类型jsonb
不需要使用子字符串或正则表达式,只需lateral join
withjsonb_array_elements
将为您完成所需的事情。试试下面的查询。
select x->>'Score' "Score" from vegetables
cross join lateral jsonb_array_elements(json->'Items') x
推荐阅读
- c - 当数据类型和返回类型从 int 更改为 float 或 double 时行列式函数中的分段错误
- android - 如何关闭 TwilightManager 日志记录
- html - Jumbotron 并非始终如一
- c# - 是否可以使用 url 生成客户端模型来招摇文档?
- cmake - 如何在 CMake 中制作一个用 Tcl 编写的项目?
- c# - 具有空值的 C# WPF 复选框?
- c# - 在基本静态构造函数中显式调用静态构造函数
- c# - C# 区域中的“标识符引用”
- android - Android Studio libgdx setToOrtho(ydown = true) 不起作用
- r - 如何在 Power Bi 中为 R 中的 ggplot2 geom_line 函数排除零