检查 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 类型