假设我有一个如下所示的 json:
some_json = {'key_a': {'nested_key': 'a'},
'key_b': {'nested_key': 'b'}}
请注意,key_a
和 key_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
ajax - django:使用 json 对象测试基于 POST 的 View