展平从任何级别的 JSON 对象检索的值

问题描述 投票:0回答:1

我的 JSON 对象在键

value
下包含双值。但是,有时它们是嵌套的,因此可以存在这样的数据结构:

[
    {
      "value": 0.1
    },
    {
      "value": {
        "value": 0.3
      }
    }
]

我正在尝试想出一个仅返回

0.1
0.3
的表达式。这可能吗? JSON 作为 JSONB 字段存储在 PostgreSQL 数据库中(如果这有什么区别的话)。

postgresql jsonpath
1个回答
0
投票

您可以在

.**
中使用
jsonb_path_query()
JSONPath 访问器
,并确保仅使用
.type()=="number"
过滤器表达式捕获
?()
的值:
db<>fiddle 的演示

select id,jsonb_path_query(jdata,'$[*].**.value ? (@.type() == "number")')
from test;
id jsonb_path_query
1 0.1
1 0.3
© www.soinside.com 2019 - 2024. All rights reserved.