假设我有一个如下所示的json:
some_json = {'key_a': {'nested_key': 'a'},
'key_b': {'nested_key': 'b'}}
注意,key_a
和key_b
是Map到字典的可选键,可能存在也可能不存在。
我有一个函数检查some_json
中是否存在外键,并返回一个布尔值。
CREATE FUNCTION key_exists(some_json json, outer_key text)
RETURNS boolean AS $$
BEGIN
RETURN (some_json->outer_key IS NULL);
END;
$$ LANGUAGE plpgsql;
出现以下错误:
ProgrammingError: operator does not exist: json -> boolean
为什么outer_key
等于布尔值?执行这个检查的正确语法是什么?
5条答案
按热度按时间xxb16uws1#
您还可以使用“?”运算符,如下所示:
如果需要通过嵌套键查询,请按如下方式使用:
参见http://www.postgresql.org/docs/9.5/static/functions-json.html
注:仅适用于
jsonb
类型。moiiocjp2#
您的函数与名称完全相反,但修复函数的方法是在
some_json->outer_key
周围添加(
和)
。下面是它的完整功能,并且与函数名匹配(注意
NULL
前面的NOT
)。一些测试:
这里当一个键不存在时:
6tr1vspr3#
要检查键是否存在,您可以使用运算符-〉this用于通过键获取JSON对象字段例如:
您也可以通过运算符#〉和#〉〉搜索关键字
获取JSON对象字段作为文本:“{“a”:1,“B”:2}“::json-〉〉”b“,方法是使用运算符-〉〉
nkhmeac64#
PostgreSQL 14为json/jsonb添加了下标功能。
SELECT ('{"key_a":1}'::jsonb) ['key_a'] is not null;
返回
t
。laik7k3q5#
在Postgres中,如果你选择了一个不存在的键,它将返回null。所以你可以通过检查一个键的null值来检查该键是否存在。