当前位置: 首页 > 面试题库 >

如何在json列中查询空对象?

苏伟志
2023-03-14
问题内容

寻找所有的行,其中某个json列包含一个空html" target="_blank">对象{}。对于JSON数组,或者在对象中寻找特定键,这是可能的。但是我只想知道对象是否为空。似乎找不到要执行此操作的运算符。

 dev=# \d test
     Table "public.test"
  Column | Type | Modifiers
 --------+------+-----------
  foo    | json |

 dev=# select * from test;
    foo
 ---------
  {"a":1}
  {"b":1}
  {}
 (3 rows)

 dev=# select * from test where foo != '{}';
 ERROR:  operator does not exist: json <> unknown
 LINE 1: select * from test where foo != '{}';
                                      ^
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
 dev=# select * from test where foo != to_json('{}'::text);
 ERROR:  operator does not exist: json <> json
 LINE 1: select * from test where foo != to_json('{}'::text);
                                      ^
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
 dwv=# select * from test where foo != '{}'::json;
 ERROR:  operator does not exist: json <> json
 LINE 1: select * from test where foo != '{}'::json;
                                      ^
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

问题答案:

没有平等(或等于)运算符 的数据类型 json 作为一个整体,因为平等是很难建立。
jsonb

在可行的情况下,请考虑使用Postgres 9.4或更高版本。有关dba.SE(上一章)的相关答案中的更多详细信息:

  • 如何从PostgreSQL中的JSON []数组中删除已知元素?

SELECT DISTINCT json_column ...... GROUP BY json_column由于相同的原因失败(没有相等运算符)。

将表达式的两边都转换为textallow =<>operator,但这通常不可靠,因为 同一 JSON值可能有很多文本表示形式。

但是 ,对于 这种特殊情况空对象 ),它可以正常工作:

select * from test where foo::text <> '{}'::text;


 类似资料:
  • 问题内容: 寻找所有的行,其中某个json列包含一个空对象{}。对于JSON数组,或者在对象中寻找特定键,这是可能的。但是我只想知道对象是否为空。似乎找不到可以执行此操作的运算符。 问题答案: 有没有平等(或等于)运算符的数据类型json作为一个整体,因为平等是很难建立。jsonb在可行的情况下,请考虑使用Postgres 9.4或更高版本。有关dba.SE(上一章)的此相关答案中的更多详细信息:

  • 本文向大家介绍如何在PostgreSQL中定义和查询json列?,包括了如何在PostgreSQL中定义和查询json列?的使用技巧和注意事项,需要的朋友参考一下 在PostgreSQL中定义JSON列的能力使其功能非常强大,并且可以帮助PostgreSQL用户体验SQL和NoSQL的两全其美。 创建JSON列非常简单。您只需要像创建其他列一样创建/定义它,然后使用数据类型作为JSON。 让我们在

  • 问题内容: 我正在使用PHP读取JSON数据,并且该数据包含空对象(如)。所以问题是,我必须以不同的方式处理对象为空但无法找到足够好的方法进行检查的情况。看起来太吓人了,效率很低。有没有好的检查方法? 问题答案: 您要反序列化多少个对象?除非事实证明或强制转换是主要的放慢速度/瓶颈,否则我不会担心– Greg的解决方案就可以了。 不过,我建议在解码JSON数据时使用标志: 这会将JSON对象解码为

  • 问题内容: 我在postgres json列中有一些类似于下面的json的json。我正在尝试查询它以识别一些输入错误的数据。我基本上是在寻找房屋描述与房屋号码相同的地址。我不太想办法。 我写了这个sql,它将找到数据匹配的地方: 显然,这仅适用于第一所学校的第一地址。有没有办法查询每所学校的所有地址? 问题答案: 在横向联接中使用的次数与要比较的json数组的深度一样多:

  • 问题内容: 我在SQL Server 2012表中有一列,其中包含以下Json数据。 现在我想在查询中使用此列数据,例如 有没有一种方法可以在SQL Server 2012中查询JSON数据? 问题答案: 老实说,这是一种存储数据的糟糕架构,可能会导致一些严重的性能问题。 如果您真的没有控制权来更改数据库,则 可以 通过如下所示解析值 来 完成此操作,但这会导致非常不愉快的事情: 可悲的是,这很容

  • 问题内容: 我想查询的列不是表中的硬编码值,可以这样做吗?我基本上需要它作为占位符,稍后再回去填写。 例子: 那么我稍后将遍历此查询并填写占位符 在此示例中,someValue不是对象中的字段,我需要对其进行伪造。我在Coldfusion中这样做,并使用两个数据源来完成一个查询。我已经尝试过space()函数,但无法使其正常工作。 谢谢。 问题答案: 和字符串。