【发布时间】:2015-08-02 22:24:15
【问题描述】:
我正在 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[] 我要插入的列。在我的异常插入代码中,我尝试设置类型:
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[]。
任何帮助将不胜感激。
【问题讨论】:
-
你为什么要使用
jsonb[]?jsonb在内部具有原生数组格式。使用jsonb值的 PostgreSQL 数组是没有意义的。 -
基本上我想要一个 JSONB 值的数组。一些用户可能比其他用户有更多的兴趣。每次用户添加有关特定兴趣的数据时,我都需要将此信息附加给用户。我找不到太多关于 JSONB[] 的信息,但它听起来像是 JSONB 值的数组。我想我可以在花括号 {} 中包含我的 JSON,并尝试每次都附加这个结构而不是覆盖它。我会试试这个建议
-
但 json 有数组。只需提供一个 single jsonb,其中顶层元素是一个包含 json 对象的 json 数组。
标签: json postgresql scala anorm