[英]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()的参数的所有字符串值。 我也不确定如何将表达式从jsonb
为jsonb[]
除了使用setType()方法设置类型之外的任何其他方式。
任何帮助将不胜感激。
许多框架不支持SQL数组。 有一个数组的SQL标准,但大多数客户端都有部分支持或根本没有支持。
在PostgreSQL中, type[]
是一个type
的数组。 所以jsonb[]
是一个jsonb
数组。 您的客户似乎不明白这一点 - 它不支持数组,或者它基于每个数据类型具有特殊的数组支持。
幸运的是,你并不需要的SQL阵列jsonb
,因为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的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.