我可以在条件语句中使用 json_array_length 吗?

Can I use json_array_length with a conditional?

我有一个字段 JSON 我正在查询:

字段 json_data 的示例数据点如下所示:

apples=
[{"CHAR_STARS":1,"CHAR_A1_LVL":1},
{"CHAR_STARS":1,"CHAR_A1_LVL":2}]

我可以用 json_array_length(json_data['apples']) 得到苹果的数量,在这种情况下 returns 2

什么是我只想计算 CHAR_A1_LVL > 1 的?在这种情况下,这将是 return 1。

我该怎么做?

假设您的 JSON 数据具有常规架构,您可以将其转换为 array(row(char_stars bigint, char_a1_lvl bigint)) 并使用 filter with a lambda expression 到 select 匹配所需条件的元素。

例如:

WITH data(x) AS (
    VALUES '[{"CHAR_STARS":1,"CHAR_A1_LVL":1}, {"CHAR_STARS":1,"CHAR_A1_LVL":2}]'
)
SELECT cardinality(
    filter(
        cast(json_parse(x) as array(row(char_stars bigint, char_a1_lvl bigint))),
        r -> r.char_a1_lvl > 1))
FROM data;