阅读Scala Play Framework中的JSON树结构

Joo*_*ost 6 json scala playframework playframework-2.0

我正在尝试在Play Framework 2.1.3中处理Ajax POST请求.post数据是一个JSON对象,其结构如下:

{ id: "a", name: "myname", kids : [{ id: "a1", name : "kid1", kids: []}, {id: "a2", name: "kid2", kids: [{id: "aa1", name :"grandkid", kids: []}]}]
Run Code Online (Sandbox Code Playgroud)

我想任意深入地嵌入'儿童'.我想到的课程是这样的(我意识到递归可能有问题):

case class Person {
  id: String,
  name: String,
  kids: Array[Person]
}
Run Code Online (Sandbox Code Playgroud)

我想到的格式:

implicit val personFormat:Format[Person] = Json.format[Person]
Run Code Online (Sandbox Code Playgroud)

Play在我写的格式上抛出错误:

类型不匹配; 发现:controllers.Resources.Person必需:Array [controllers.Resources.Person]

我知道Play有一个Tree结构.我找不到关于如何将其与JSON读取联系起来的示例/文档.

任何帮助都非常感谢,谢谢

Rob*_*een 10

你需要一个递归的val,比如:

implicit val jsonReads: Reads[Person] = ((__ \ "id").read[String] and (__ \ "name").read[String] and (__ \ "kids").read[Seq[Person]])(apply _)
Run Code Online (Sandbox Code Playgroud)

(我已经将集合类型从Array更改为Seq,因为它更通用,允许您在不影响下线代码的情况下更改实现.)

这是使用此处记录的语法.