gpt4 book ai didi

Play 2.1.1中Json写入

转载 作者:行者123 更新时间:2023-12-03 03:49:10 28 4
gpt4 key购买 nike

我最近开始使用 Playframework,并正在使用 Play 2.1.1 和 Slick 1.0.0 实现一个网站。我现在正在尝试围绕 Json Writes 进行思考,因为我想在我的 Controller 之一中返回 Json。

我一直在查看有关该主题的几个引用文献(例如this onethis one,但无法弄清楚我做错了什么。

我有一个如下所示的模型:

case class AreaZipcode(  id: Int,
zipcode: String,
area: String,
city: String
)

object AreaZipcodes extends Table[AreaZipcode]("wijk_postcode") {

implicit val areaZipcodeFormat = Json.format[AreaZipcode]

def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def zipcode = column[String]("postcode", O.NotNull)
def area = column[String]("wijk", O.NotNull)
def city = column[String]("plaats", O.NotNull)

def autoInc = * returning id

def * = id ~ zipcode ~ area ~ city <> (AreaZipcode.apply _, AreaZipcode.unapply _)
}

您可以看到我正在尝试使用的隐式 val,但是当我尝试通过执行以下操作在 Controller 中返回 Json 时:

Ok(Json.toJson(areas.map(a => Json.toJson(a))))

不知怎的,我仍然面临着这个错误消息:

No Json deserializer found for type models.AreaZipcode. Try to implement an implicit     Writes or Format for this type. 

我尝试了几种其他方法来实现写入。例如,我尝试了以下方法而不是上面的隐式 val:

implicit object areaZipcodeFormat extends Format[AreaZipcode] {

def writes(a: AreaZipcode): JsValue = {
Json.obj(
"id" -> JsObject(a.id),
"zipcode" -> JsString(a.zipcode),
"area" -> JsString(a.area),
"city" -> JsString(a.city)
)
}
def reads(json: JsValue): AreaZipcode = AreaZipcode(
(json \ "id").as[Int],
(json \ "zipcode").as[String],
(json \ "area").as[String],
(json \ "city").as[String]
)

}

有人可以给我指出正确的方向吗?

最佳答案

JSON Inception来救援!你只需要写

import play.api.libs.json._
implicit val areaZipcodeFormat = Json.format[AreaZipcode]

就是这样。得益于 Scala 2.10 宏的魔力,您不再需要编写自己的 ReadsWrites。 (我建议您阅读 Play 关于 Working with JSON 的文档,它解释了很多。)

编辑:我没有注意到您在 AreaZipcodes 对象中已经有了 Json.format 。您需要将该行移出 AreaZipcodes 或将其导入到当前上下文中,即

import AreaZipcodes.areaZipcodeFormat

关于Play 2.1.1中Json写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17040852/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com