Json 在使用Scala Play进行写操作时遇到问题
首先,我想对这篇长文章说声抱歉,我真的很感谢那些仍然关注我问题的人 我有一个控制器,它应该返回一个json响应,其结构如下:Json 在使用Scala Play进行写操作时遇到问题,json,scala,playframework,playframework-2.1,jsonserializer,Json,Scala,Playframework,Playframework 2.1,Jsonserializer,首先,我想对这篇长文章说声抱歉,我真的很感谢那些仍然关注我问题的人 我有一个控制器,它应该返回一个json响应,其结构如下: { result: [ { key: value, key: value, key: value, key: [ { key: value, key: value,
{
result: [
{
key: value,
key: value,
key: value,
key: [
{
key: value,
key: value,
key: value
},...
]
},....
]
}
然而,我有问题,让写入工作,因为我想
注意。我将在有问题的行下添加注释
object APIController extends Controller {
def feed() = Action {
val objects = repo.getObjects().toList
Ok(Json.toJson(Json.obj("result" -> Class_1.apply(objects).result)))
}
首先,如果我没有创建一个Json.obj(“result”->List[objects])
Json结果中不会显示结果键。如果我为此添加了一个Writer,我会得到一个错误,即列表[对象]必须有一个Writer。但是如果我像上面那样写,列表[对象]就不需要编写器
*“items”->o.listOfStuff
说它需要一个写入
的列表[列表中的类型]
,但是我有一个写入列表中的对象(类_3)的操作,我不需要一个写入
,因为当从类_2序列化对象列表时,它的行为为何是这样的*
case class Class_3 (id: Long, text: String)
object Class_3 {
def apply(obj: Object) = {
new Class_3(obj.id, obj.funnyText)
}
}
implicit val class3Writer = new Writes[Class_3] {
override def writes(o: Class_3): JsValue = {
Json.obj(
"id" -> o.id,
"text" -> o.text
)
}
}
}
我从这段代码中得到的错误是:
No Json deserializer found for type Seq[Class_3]. Try to implement an implicit Writes or Format for this type.
[error] "items" -> o.listOfStuff
[error] ^
如果我在写操作中删除这一行,它将编译并工作。
我认为这很奇怪,因为我序列化的第一个列表没有编写器,只针对列表中的对象
有人知道它为什么会这样吗?
我该怎么做才能完成我的目标?(我希望你明白我在做什么)
提前谢谢
只需将隐式val class3Writer
放在class2Writes
可能会将
隐式val class3Writer
放在class2Writes
之前?哦,天哪。。这实际上解决了我的问题。非常感谢!然后我会回答
case class Class_3 (id: Long, text: String)
object Class_3 {
def apply(obj: Object) = {
new Class_3(obj.id, obj.funnyText)
}
}
implicit val class3Writer = new Writes[Class_3] {
override def writes(o: Class_3): JsValue = {
Json.obj(
"id" -> o.id,
"text" -> o.text
)
}
}
}
No Json deserializer found for type Seq[Class_3]. Try to implement an implicit Writes or Format for this type.
[error] "items" -> o.listOfStuff
[error] ^