检查 json 类型列 PostgreSQL 中是不是存在字段

Posted

技术标签:

【中文标题】检查 json 类型列 PostgreSQL 中是不是存在字段【英文标题】:Check if field exists in json type column PostgreSQL检查 json 类型列 PostgreSQL 中是否存在字段 【发布时间】:2013-10-17 08:58:22 【问题描述】:

如何检查 Postgres 中的 json 字段是否具有特定元素?

我用json->>'attribute' is not null 试过了,还是不行。

【问题讨论】:

【参考方案1】:

使用->:

where (json->'attribute') is not null

【讨论】:

当我尝试这个时,我得到了错误cannot extract element from a scalar @Chad 您可能必须通过 where (myfield::json->'attribute') is not null 将您的内容转换为正确的类型。 仅供参考,不需要括号。 exists != is not null @Brendan column->'attribute' 只会在 json 路径不存在时产生 null。 column->>'attribute' 将给出 null 如果它不存在, 如果它确实存在并且值为 null,例如column = '"attribute":null'.【参考方案2】:

虽然this 有效。最好使用特殊运算符?

WHERE your_column_name::jsonb ? 'attribute'

注意:仅适用于jsonb 类型。

【讨论】:

如果列已经是 jsonb 类型,则不需要强制转换。对于 jsonb 列,这是一个更清晰的答案。 这对jsonb来说确实更干净 请注意,? 运算符仅适用于***属性。如果您想检查 json 结构中是否存在较低的路径,请按照 Roman 的回答执行 .. where column->'foo'->'bar'->'baz' is not null 表达式.. WHERE column->'foo'->'bar'->'baz' IS NOT NULL至少在Postgres 9.4中不起作用,你需要用( )包围左边的部分,所以要使表达式起作用:.. WHERE (column->'foo'->'bar'->'baz') IS NOT NULL @RocketAppliances:当您使用-> 时,它将检查your_column_name.attribute 的现有值,但? 将检查attribute 的现有值。那是。例如:obj.field IS NULL 将返回 true,但 obj ? 'field' 将返回 false

以上是关于检查 json 类型列 PostgreSQL 中是不是存在字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PySpark 将 JSON 列类型写入 Postgres?

如何在 postgresql 中对 json 类型使用唯一约束

PostgreSQL 9.2 - 将 TEXT json 字符串转换为 json/hstore 类型

在 Flask-sqlalchemy 和 Postgresql 中使用 JSON 类型

错误:列是 json 类型,但表达式在 Hibernate 中是不同的字符类型

检查PostgreSQL jsonb列是不是包含某些字符串的快速方法