如何检查postgres中是否存在json密钥? [英] How do I check if a json key exists in Postgres?

查看:0
本文介绍了如何检查postgres中是否存在json密钥?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个如下所示的json:

some_json = {'key_a': {'nested_key': 'a'},
             'key_b': {'nested_key': 'b'}}

请注意,key_akey_b是映射到词典的可选键,可能存在也可能不存在。

我有一个函数可以检查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等同于布尔值?执行此检查的正确语法是什么?

推荐答案

您的函数与名称完全相反,但修复您的函数的方法是在some_json->outer_key前后添加()

这里是完全运行的,并且与您的函数名匹配(请注意NULL前面的NOT)。

CREATE FUNCTION key_exists(some_json json, outer_key text)
RETURNS boolean AS $$
BEGIN
    RETURN (some_json->outer_key) IS NOT NULL;
END;
$$ LANGUAGE plpgsql;

部分测试:

select key_exists('{"key_a": {"nested_key": "a"}, "key_b": {"nested_key": "b"}}'::json, 'key_a');
 key_exists 
------------
 t
(1 row)

当密钥不存在时:

select key_exists('{"key_a": {"nested_key": "a"}, "key_b": {"nested_key": "b"}}'::json, 'test');
 key_exists 
------------
 f
(1 row)

这篇关于如何检查postgres中是否存在json密钥?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆