获取所有符合指定条件的 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 查询的结果是什么。

step-by-step demo:db<>fiddle

SELECT
    json_agg(elements)                       -- 3
FROM mytable,
    json_array_elements(mydata) as elements  -- 1
WHERE (elements ->> 'key1')::int < 25        -- 2
  1. 提取 JSON 数组:每个元素现在都在自己的记录中
  2. 按值过滤。请注意,->> returns 类型 text,因此您需要将其转换为 int 类型
  3. 将剩余元素重新聚合到新数组中

如果您使用的是 Postgres 12 或更高版本,您可以使用 JSON 路径函数:

select jsonb_path_query_array(the_column, '$[*] ? (@.key1 <= 25)')
from the_table

Online example