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

如何查询JSON列中的空对象?

颜英博
2023-03-14
问题内容

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

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

  • 问题内容: 我使用 PostgreSQL 9.5 和Rails5。我想查询下面显示的包含JSON对象数组的列,以返回包含并执行计数的所有JSON数组元素。我使用 的 SQL 显示在json数据下方。运行查询只会返回一个空数组。 这是我的数据: 我想要其中一个sql查询返回: 和另一个查询以返回数组,以便我可以在应用程序中对其调用count,还可以遍历它以创建表单: 我试过这个SQL查询: 我也试过

  • 我使用PostgreSQL 9.5和Rails 5。我想查询下面显示的包含JSON对象数组的jsonb列,以返回包含的所有JSON数组元素,并执行计数 我使用的SQL显示在json数据下面。运行查询只返回一个空数组。 我尝试了这里和这里建议的查询。 这就是我的jsonb数据的样子: 我希望其中一个sql查询返回: 和另一个返回数组的查询,以便我可以在我的应用程序中调用count并循环使用它来创建表

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

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