使用 PostgreSQL,我需要从 JSON 中提取一个值,该值可能位于多个不同的路径。例如,考虑以下 JSON:
{"a": 1, "b": 2, "c": 3}
和
{"a": 1, "b": 2, "d": 4}
我需要提取字段c
或d
,分别得到 3 和 4。
我可以使用 JSONPath 括号表示法进行联合,但不幸的是,PostgreSQL 的实现仅将其用于数组。
因此,这个想法适用于数组:
> SELECT JSON_QUERY(jsonb '[1, 2, 3]', '$[3, 2]' ERROR ON ERROR)
3
但它对我的情况不起作用:
> SELECT JSON_QUERY(jsonb '{"a": 1, "b": 2, "c": 3}', '$["a"]' ERROR ON ERROR)
SQL Error [22033]: ERROR: jsonpath array subscript is not a single numeric value
有没有办法用一个 JSONPath 表达式执行此任务?
我想在JSON_TABLE
调用中使用此表达式。当然,有一个选项可以分别评估每个表达式,然后COALESCE
在纯 SQL 中使用,但这
- 添加单独的转换步骤
- 需要手动检查是否只找到了一个值。有了
ERROR ON ERROR
,我让 PostgreSQL 帮我检查这个
因此,如果可能的话,我想避免这种解决方法。