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

PostgreSQL嵌套JSON查询

秦毅
2023-03-14
问题内容

在PostgreSQL 9.3.4上,我有一个称为“ person”的JSON类型列,并且其中存储的数据为format {dogs: [{breed: <>, name: <>}, {breed: <>, name: <>}]}。我想检索索引为0的狗的品种。这是我运行的两个查询:

不起作用

db=> select person->'dogs'->>0->'breed' from people where id = 77;
ERROR:  operator does not exist: text -> unknown
LINE 1: select person->'dogs'->>0->'bree...
                                 ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

作品

select (person->'dogs'->>0)::json->'breed' from es_config_app_solutiondraft where id = 77;
 ?column?
-----------
 "westie"
(1 row)

为什么必须进行类型转换?效率低下吗?我是在做错什么,还是对Postgres JSON支持有必要?


问题答案:

这是因为运算符->>将JSON数组元素获取为文本。您需要强制转换以将其结果转换回JSON。

您可以使用operator消除此多余的转换->

select person->'dogs'->0->'breed' from people where id = 77;


 类似资料:
  • 在PostgreSQL 9.3.4中,我有一个名为“person”的JSON类型列,其中存储的数据格式为

  • 我的数据库中有一个名为“json”的表,有两列:“id”和“data” 目前只有一行存储在其中,id为1,数据为JSON结构: 我需要更新json的一个键:“Name here”必须变成“updated” 这就是我尝试的: 但我有一个错误: “更新”处或附近的语法错误

  • 我已将上述格式的json对象存储在postgresql数据库中。每个对象都包含有关某个学生的信息以及注册信息。我在数组中具有嵌套数组的复杂对象。我试图选择“信息”数组中的所有元素。我尝试使用以下查询: 此查询不起作用,并出现以下错误:“无法在标量上调用json\u array\u元素”。是否有其他查询可用于提取嵌套数组“info”的元素??

  • 我是JSON/JSONB数据类型的新手,在选择更深层次的JSONB元素时遇到了一些问题。 对此有什么建议吗?

  • 问题内容: 我有正在使用nodeJS读取的csv文件。我在阅读之前将每个文件转换为文本。 文件中的每一行都有以’=’分隔的数据。 每行看起来像 “ =“之前的第一部分代表我应用程序中json对象的索引。我的目的是解析此数据并为其构建json表示,以便上面的行成为 使用javascript / node js; 如何将应该表示嵌套JSON键序列的字符串转换为上述json对象? 问题答案: 您可以分割

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga