繁体   English   中英

如何为play-scala anorm pgsql设置jsonb []的类型

[英]how to set type for jsonb[] for play-scala anorm pgsql

我正在使用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: Unknown type 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()的参数的所有字符串值。 我也不确定如何将表达式从jsonbjsonb[]除了使用setType()方法设置类型之外的任何其他方式。

任何帮助将不胜感激。

许多框架不支持SQL数组。 有一个数组的SQL标准,但大多数客户端都有部分支持或根本没有支持。

在PostgreSQL中, type[]是一个type的数组。 所以jsonb[]是一个jsonb数组。 您的客户似乎不明白这一点 - 它不支持数组,或者它基于每个数据类型具有特殊的数组支持。

幸运的是,你并不需要的SQL阵列jsonb ,因为jsonbJSON的序列化的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的ARRAY[...]构造记号,并注意'string literals'包含json对象数组里面

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM