当前位置: 首页 > 知识库问答 >
问题:

如何为jsonb[]设置类型scalaanorm pgsql

督建柏
2023-03-14

我正在scala /play框架中构建一个调查应用程序,并使用postgres9.4和anorm。我在其他地方使用jsonb作为数据类型,但在一个位置我想使用jsonb[],认为这种类型是jsonb值的数组。我的json结构如下所示:

[
    {"guitar":{"passion":3,
               "expertise":5,
               "willingToTeach":false,
               "lookingForOthers":false
              }
     },
     {"soccer":{"passion":3,
                "expertise":3,
                "willingToTeach":true,
                "lookingForOthers":true
                }
     }
]

这里每个兴趣都是一个json结构。我已经能够使用jsonb作为数据类型将json响应值添加到pgsql中的其他列,但当我尝试使用jsonb[]时,我收到了抱怨:[PSQLException:未知类型jsonb[]。]在pgadmin3中,它从字面上显示了我尝试插入的列的确切数据类型:jsonb[]。在我的anorm插入代码中,我尝试设置类型:

val pgObject = new PGobject();
pgObject.setType("jsonb")

但是我得到了这个错误:

[PSQLException: ERROR: column "passions" is of type jsonb[] but expression is of type jsonb
  Hint: You will need to rewrite or cast the expression.
  Position: 43]

我试着查找这个,但我甚至找不到所有可以用作pgObject参数的字符串值。setType()。除了使用setType()方法设置类型之外,我还不确定如何将表达式从jsonb转换为jsonb[]

任何帮助都将不胜感激。

共有1个答案

康秋月
2023-03-14

许多框架不支持SQL数组。阵列有一个SQL标准,但大多数客户机都部分支持或根本不支持它。

在PostgreSQLtype[]type的数组。因此jsonb[]jsonb的数组。您的客户端似乎不理解这一点——要么它不支持数组,要么它在每个数据类型的基础上具有特殊大小写的数组支持。

幸运的是,您不需要jsonb的SQL数组,因为jsonb存储JSON的JavaScript序列化对象符号。JSON定义了对象和数组。因此,在jsonb字段中可以有一个对象数组。不需要SQL数组。

这是一个包含jsonb值的SQL数组,其中每个jsonb值都是一个对象(字典):

test=> SELECT ARRAY[
           '{ "x": 1, "y": 2 }',
           '{ "a": 3, "b": 4 }'
        ] :: jsonb[];
                        array                        
-----------------------------------------------------
 {"{ \"x\": 1, \"y\": 2 }","{ \"a\": 3, \"b\": 4 }"}
(1 row)

它的数据类型为jsonb[]。请注意PostgreSQL数组[…]的使用 构造函数表示法,并注意包含json对象的'string literals'在数组中。

这是一个jsonb字段,包含一个对象数组:

test=> SELECT 
'
        [
                { "x": 1, "y": 2 },
                { "a": 3, "b": 4 }
        ]
' :: jsonb;
                jsonb                 
--------------------------------------
 [{"x": 1, "y": 2}, {"a": 3, "b": 4}]
(1 row)

请注意,它是一个字符串文本,包含对象数组的json序列化。

 类似资料:
  • 问题内容: 我正在尝试以下查询: (+1.0仅用于强制转换浮动。我的实际查询要复杂得多,此查询只是问题的测试用例。) 我得到了错误: 如果我添加显式强制转换: 错误变为: 我知道大多数jsonb值不能转换为浮点数,但是在这种情况下,我知道纬度都是JSON编号。 是否有一个将jsonb值强制转换为浮点数(或为不可广播的返回NULL)的函数? 问题答案: 要从中获得价值,有两种操作。第一个将返回。第二

  • null 当我创建正文部分时,我是否应该显式地设置top mime消息的内容类型,然后设置每个正文部分? 如果是,在上面的例子中它们应该是什么? 对于html建议,对于附件建议,对于内联建议。我正在使用所有这些,那么对于完整的消息和不同的主体部分应该是什么内容类型? 通过上面的代码,我得到了正确的html文本,纯文本,内联图像和附件在正确的地方与James集成的ThunderBird。 因此,我不

  • 问题内容: 我正在使用Flask,并且从get请求返回一个XML文件。如何将内容类型设置为xml? 例如 问题答案: 尝试这样: 实际的Content-Type基于mimetype参数和字符集(默认为UTF-8)。

  • 问题内容: 我正在使用poi 3.6 我能够正确创建Excel。但是,当我尝试将单元格类型设置为number时,它总是为我提供常规的单元格类型。 即在新创建的excel中,当我右键单击并设置单元格格式->我总是发现数字是General。 我的代码是这样的 您能建议一下这里缺少什么吗? 问题答案: 您也可以尝试这种方法: 当然,请查看有关数据格式的文档和示例。

  • 我在实体类中使用Spring Boot和Hibernate JPA,代码如下:, 其中生成了一个集合表user\u files。但是,默认的列类型是VARCHAR(255),有时用户数据可能比这更长。我的问题是如何定义此表以将BLOB或TEXT用于列?我试图在那里直接插入Lob注释,但没有成功。

  • 问题内容: 我没有找到使用JPA(EclipseLink)从PostgreSQL映射JSON和JSONB数据类型的方法。是否有人将这种数据类型与JPA结合使用,可以给我一些工作示例吗? 问题答案: 所有的答案都帮助我达成了最终的解决方案,该解决方案可以用于JPA,而不是专门用于EclipseLink或Hibernate。