小编Joo*_*ost的帖子

阅读Scala Play Framework中的JSON树结构

我正在尝试在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读取联系起来的示例/文档.

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

json scala playframework playframework-2.0

6
推荐指数
1
解决办法
1678
查看次数

使用Play 2.1.1在JSON中迭代和重新格式化数组

解析后我无法操作Json数组.

我使用post方法在Javascript中传递以下Json对象:[{"id":"someid"},{"id":"anotherid"}]

我已经使用安迪的设定(迭代数组中JSON的Play 2.1.1)来解析通过使用POST方法传递JSON编码阵列(I移动的代码到控制器为方便起见)

  case class FBUser(
     id: String
  ){}
  object FBUser {
    /** Uses a Scala Macro to define the Reads function */
    implicit val userReads: Reads[FBUser] = Json.reads[FBUser]
    implicit val fbUserFormat:Format[FBUser] = Json.format[FBUser]
  }

  def doQuery = Action (parse.json){ implicit request =>

    val readIDFromInput =  (__).read[List[FBUser]]

    val IDs = request.body.validate(readIDFromInput)

    IDs.map(
      item => Ok(Json.toJson(item))
    ).recoverTotal{
      err => BadRequest(JsError.toFlatJson(err))
    }

  }
Run Code Online (Sandbox Code Playgroud)

这应该工作:它读取并返回Json对象.我无法使用Json对象创建新变量.在这种情况下,我想构建一个像{["someid","anotherid"]}这样的Json对象(也就是说,没有"id")

首先我试过: item => Ok(Json.toJson(item.id)) // trying to access item.id

但是这导致了一个错误:value id不是object controllers.ScalaPoster.FBUser的成员

我尝试在object(def getId():String …

json scala playframework playframework-2.0

5
推荐指数
1
解决办法
654
查看次数

标签 统计

json ×2

playframework ×2

playframework-2.0 ×2

scala ×2