获取所有符合指定条件的 json 对象
get all the json object with a specified conditions
我有一个 json数组,如下所示
[{"key1":10},{"key1":20},{"key1":30}]
我想获取所有 json 具有指定条件的对象。假设获取 key1 小于 25 的所有 json 对象。所以我的 sql 查询应该 return 这个列表
[{"key1":10},{"key1":20}]
对此 SQL 查询的结果是什么。
SELECT
json_agg(elements) -- 3
FROM mytable,
json_array_elements(mydata) as elements -- 1
WHERE (elements ->> 'key1')::int < 25 -- 2
- 提取 JSON 数组:每个元素现在都在自己的记录中
- 按值过滤。请注意,
->>
returns 类型 text
,因此您需要将其转换为 int
类型
- 将剩余元素重新聚合到新数组中
如果您使用的是 Postgres 12 或更高版本,您可以使用 JSON 路径函数:
select jsonb_path_query_array(the_column, '$[*] ? (@.key1 <= 25)')
from the_table
我有一个 json数组,如下所示
[{"key1":10},{"key1":20},{"key1":30}]
我想获取所有 json 具有指定条件的对象。假设获取 key1 小于 25 的所有 json 对象。所以我的 sql 查询应该 return 这个列表
[{"key1":10},{"key1":20}]
对此 SQL 查询的结果是什么。
SELECT
json_agg(elements) -- 3
FROM mytable,
json_array_elements(mydata) as elements -- 1
WHERE (elements ->> 'key1')::int < 25 -- 2
- 提取 JSON 数组:每个元素现在都在自己的记录中
- 按值过滤。请注意,
->>
returns 类型text
,因此您需要将其转换为int
类型 - 将剩余元素重新聚合到新数组中
如果您使用的是 Postgres 12 或更高版本,您可以使用 JSON 路径函数:
select jsonb_path_query_array(the_column, '$[*] ? (@.key1 <= 25)')
from the_table