我正在尝试在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数组.
我使用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 …