json - 如何检查 Postgres 中是否存在 json 键?

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

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

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

我有一个函数可以检查 some_json 中是否存在外键并返回一个 bool 值。

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 等同于 bool 值?执行此检查的正确语法是什么?

最佳答案

您也可以使用“?”像这样的运算符(operator):

SELECT '{"key_a":1}'::jsonb ? 'key_a'

如果需要通过嵌套键查询,可以这样使用:

SELECT '{"key_a": {"nested_key": "a"}}'::jsonb -> 'key_a' ? 'nested_key' 

见 http://www.postgresql.org/docs/9.5/static/functions-json.html

注意:仅适用于 jsonb 类型。

https://stackoverflow.com/questions/28921355/

相关文章:

java - 使用 JSONObject 在 Java 中为以下结构创建嵌套 JSON 对象?

jquery - 使用 JSON 将嵌套对象发布到 Spring MVC Controller

javascript - 将 JSON 数据从 php 传递给 html-data 属性,然后传递给

ruby-on-rails - rails jbuilder - 只是一个字符串数组

jquery - 来源http ://localhost is not allowed by Acc

iphone - 减去两个 NSDate 对象

ajax - django:使用 json 对象测试基于 POST 的 View

c# - 发布到 Web API 时出现不支持的媒体类型错误

jquery - 获取带有 AJAX 错误的服务器响应?

c# - 模型绑定(bind)新的 Datatables 1.10 参数