gpt4 book ai didi

json - 使用Play呈现JSON!和Scala

转载 作者:行者123 更新时间:2023-12-04 13:41:31 24 4
gpt4 key购买 nike

我有一个关于从Scala类渲染JSON对象的简单问题。为什么我必须实现解串器(读,写)。

我有以下案例类:

case class User(firstname:String, lastname:String, age:Int)

在我的 Controller 中:
val milo:User = new User("Sam","Fisher",23);

Json.toJson(milo);

我收到编译错误:没有为类型model.User找到Json反序列化器。尝试为此类型实现隐式的Writes或Format。

在我之前的项目中,我必须在类中实现一个reader,writer对象,它才能正常工作,但我觉得这很烦人。
object UserWebsite {
implicit object UserWebsiteReads extends Format[UserWebsite] {

def reads(json: JsValue) = UserWebsite(
(json \ "email").as[String],
(json \ "url").as[String],
(json \ "imageurl").as[String])

def writes(ts: UserWebsite) = JsObject(Seq(
"email" -> JsString(ts.email),
"url" -> JsString(ts.url),
"imageurl" -> JsString(ts.imageurl)))
}
}

最佳答案

我真的建议升级以 Play 2.1-RC1,因为在这里,JSON编写器/读取器的定义非常简单(更多详细信息here)

但是为了帮助您避免一些错误,我将为您提供一些有关导入的提示:
-仅使用这些进口! (注意不包括json.Reads)

import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.libs.json.Writes._

而且您只需要编写此代码即可向Json写入类/从Json读取类(当然,您将使用 User而不是 Address:
implicit val addressWrites = Json.writes[Address]
implicit val addressReads = Json.reads[Address]

现在,它们将被自动使用:

的示例编写:
Ok(Json.toJson(entities.map(s => Json.toJson(s))))

的示例阅读(我放了通过从正文中读取json来执行POST以创建实体的示例),请注意此处使用的 addressReads
def create = Action(parse.json) { request =>
request.body.validate(addressReads).map { entity =>
Addresses.insert(entity)
Ok(RestResponses.toJson(RestResponse(OK, "Succesfully created a new entity.")))
}.recover { Result =>
BadRequest(RestResponses.toJson(RestResponse(BAD_REQUEST, "Unable to transform JSON body to entity.")))
}
}

总之,他们尝试(成功地)使有关JSON的事情变得非常简单。

关于json - 使用Play呈现JSON!和Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594924/

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