[英]Converting Postgres PGObject to JsValue in Anorm
這是我正在使用Anorm通過JDBC在Postgres中執行的查詢:
val sql = s"select row_to_json(t) as result from tablename t;"
該查詢返回的對象類型為PGObject,這是JDBC在無法識別DB傳遞的對象類型時使用的默認對象。
我想像這樣檢索此值:
db.withConnection { implicit conn =>
SQL(sql).as(get[JsValue]("result").single)
}
您有兩個選擇。
選項一 :只需將jsonb
轉換為text
類型即可更改傳遞的類型。
val sql = s"select row_to_json(t)::text as result from tablename;"
選項二
在代碼范圍內添加隱式轉換:
implicit val columnToJsValue:Column[JsValue] =
anorm.Column.nonNull[JsValue] { (value, meta) =>
val MetaDataItem(qualified, nullable, clazz)=meta
value match {
case json: org.postgresql.util.PGobject=> Right(Json.parse(json.getValue))
case _ => Left(TypeDoesNotMatch(s"Cannot convert $value: ${value.asInstanceOf[AnyRef].getClass} to Json for column $qualified"))
}
}
我從這里偷走了最后一段代碼,但我不確定它是如何工作的。 但是它可以完成工作,並使您可以使用get[JsValue]
作為有效的轉換類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.