簡體   English   中英

在Anorm中將Postgres PGObject轉換為JsValue

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM