注意:我是PlayFramework的新手。
我正在尝试将项目对象序列化为JSON字符串。我收到以下错误:
No instance of play.api.libs.json.Format is available for
scala.collection.immutable.List[Item] in the implicit scope (Hint: if declared
in the same file, make sure it's declared before)
[error] implicit val itemRESTFormat: Format[ItemREST] =
Json.format[ItemREST]
我真的根本不理解该错误意味着什么,或者不知道出了什么问题。如果有人可以向我解释错误的含义以及潜在的问题,那就太好了。谢谢!
import...
case class ItemREST(items: List[Item]) {
def toJson: String = Json.toJson(this).as[JsObject].toString()
}
object ItemREST {
implicit val itemRESTFormat: Format[ItemREST] = Json.format[ItemREST]
def fromItem(items: List[Item]): ItemREST = {
ItemREST(items)
}
}
答案 0 :(得分:2)
在您的代码中,ItemREST
具有类型为Item
的元素列表。因此,要序列化ItemREST
,需要Item
的序列化器。
object Item {
implicit val itemFormat = Json.format[Item]
}
object ItemREST {
implicit val itemRESTFormat: Format[ItemREST] = Json.format[ItemREST]
}
您只需要在ItemREST之前声明Item的序列化程序,即可解决您的问题。
此外,您可以尝试的一件事是添加
implicit val itemFormat = Json.format[Item]
在
之前 implicit val itemRESTFormat: Format[ItemREST] = Json.format[ItemREST]
完整的代码如下:
case class Item(i : Int)
case class ItemList(list : List[Item])
object ItemList{
implicit val itemFormat = Json.format[Item]
implicit val itemListFormat = Json.format[ItemList]
}
object SOQ extends App {
println(Json.toJson(ItemList(List(Item(1),Item(2)))))
}
将n输出为
{"list":[{"i":1},{"i":2}]}