0

我是玩框架和 scala 语言的新手,我想将我的 arraylist 转换为 json,在 java 中,我首先将值存储到列表中,然后像这样将列表转换为 jsonpublic static Result getJson(){ List<Task> abc = Task.all(); return ok(toJson(abc)); }

通过这段代码,我实现了相同的目标,但是当我在 scala 中尝试相同的方法时,它不起作用:代码是 def jsonTask= Action { var jsonValue:List[Task] = Task.all() Ok(views.html.display(Json.toJson(jsonValue))) }并且我面临错误::

未找到类型 List[models.Task] 的 Json 反序列化器。尝试为此类型实现隐式写入或格式。

有人给了我同样的解决方案。

4

5 回答 5

1

我找到了解决方案。

在模型类中定义隐式编写器。

implicit val implicitTaskWrites = new Writes[Task] {
def writes(taskobj: Task): JsValue = {
  Json.obj(
    "id" -> taskobj.id,
    "label" -> taskobj.label
  ) 
} 

}

这会将每个 Task (我的模型类)对象转换为 JsValue 对象。然后

   def parse(list :List[Task]) :String ={

     var json=new JsArray()
     for(task:Task <- list ){
        json=json.append(Json.toJson( task ) )
     }

     json.toString()
 }

也添加此代码。

然后如果你调用 parse(list) ,可以得到 json 字符串。

于 2013-08-09T07:46:36.520 回答
0

你能把你的视图文件发给我们吗?

您是否尝试scala.List在文件中使用参数.scala.html,而不仅仅是List?

编辑:为什么将 JSON 发送到您的视图?您不应该直接返回 Json ( Ok(JsArray(jsonValue))) 还是在视图中使用您的列表?

于 2013-08-06T08:36:08.640 回答
0

可以使用库play.libs.Json中的toJSon方法步骤: 第一步:导入play.libs.Json;

然后使用

  ok(JSon.toJson(list));

显示转换后的 json。

于 2013-08-06T13:04:22.757 回答
0

您必须在 display.scala.html @(jsonTasks: play.api.libs.json.JsValue) 中提供一个参数

于 2013-08-06T09:01:51.233 回答
0

我得到了结果,但采用了不同的方法..

我使用了 key,value map`val results= SQL("SELECT * FROM exercise").apply() 的方法

var a:Int=0 for(a<- 0 to results.length-1) {val jsonrec=Json.obj("id" ->results(a)Long,"label"->results(a)String ) 输出.add(jsonrec) }'...

但如果我用我使用和发布的问题的方法得到答案可能会更好..

于 2013-08-08T06:46:55.243 回答