为什么Angular JSON作为ListBuffer出现?(以及如何解析…)

为什么Angular JSON作为ListBuffer出现?(以及如何解析…),json,angularjs,scala,parsing,playframework-2.0,Json,Angularjs,Scala,Parsing,Playframework 2.0,编辑我最初描述的是错误的——重写如下 出于某种原因,我无法以将JSON负载解释为简单字符串的方式发送JSON负载。看一下主体,它总是一个ListBuffer,原因不明 代码 Application.scala (摘自) User.scala app.js (仅相关部分) (我试过使用JSON.stringify等) 例外情况 对此进行传统的“读取”会产生这样的错误,或者类似的错误: play.api.Application$$anon$1: Execution exception[[JsResu

编辑我最初描述的是错误的——重写如下

出于某种原因,我无法以将JSON负载解释为简单字符串的方式发送JSON负载。看一下主体,它总是一个
ListBuffer
,原因不明

代码 Application.scala (摘自)

User.scala app.js (仅相关部分)

(我试过使用
JSON.stringify
等)

例外情况 对此进行传统的“读取”会产生这样的错误,或者类似的错误:

play.api.Application$$anon$1: Execution exception[[JsResultException: JsResultException(errors:List((,List(ValidationError(error.expected.jsstring,WrappedArray())))))]]
    at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10-2.2.2.jar:2.2.2]
    at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10-2.2.2.jar:2.2.2]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10-2.2.2.jar:2.2.2]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10-2.2.2.jar:2.2.2]
    at scala.Option.map(Option.scala:145) [scala-library-2.10.4.jar:na]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [play_2.10-2.2.2.jar:2.2.2]
Caused by: play.api.libs.json.JsResultException: JsResultException(errors:List((,List(ValidationError(error.expected.jsstring,WrappedArray())))))
    at play.api.libs.json.JsValue$$anonfun$2.apply(JsValue.scala:64) ~[play-json_2.10-2.2.2.jar:2.2.2]
    at play.api.libs.json.JsValue$$anonfun$2.apply(JsValue.scala:64) ~[play-json_2.10-2.2.2.jar:2.2.2]
    at play.api.libs.json.JsResult$class.fold(JsResult.scala:71) ~[play-json_2.10-2.2.2.jar:2.2.2]
    at play.api.libs.json.JsError.fold(JsResult.scala:10) ~[play-json_2.10-2.2.2.jar:2.2.2]
    at play.api.libs.json.JsValue$class.as(JsValue.scala:62) ~[play-json_2.10-2.2.2.jar:2.2.2]
    at play.api.libs.json.JsObject.as(JsValue.scala:164) ~[play-json_2.10-2.2.2.jar:2.2.2]
因为数据如下所示:

>body={play.api.libs.json。JsObject@14793}{“data”:{“name”:“Joe Blow”,“language”:1}
和“JsObject”有一个成员
字段
,它是一个ListBuffer(在本例中,size=1)

我知道这完全是一个“noob”问题,但我不知道如何从body中读取
ListBuffer
,更不用说将其解析到case类中了。我只想用最恰当的方式来解析它;我不明白为什么这个简单的JSON会被播放转换成ListBuffer


有什么建议/想法吗?

我不确定您在正确的位置搜索数据

(JsPath \ "name")
让我认为您正在跳过JSON数据结构中的“数据”级别。您可以尝试添加

(JsPath \ "data" \ "name")
看看情况是否好转。此外,您可以尝试通过以下方式直接定义隐式格式来定义读取:

 Json.format[User]
然后按照您正在执行的操作读取数据:

val placeResult = request.body.validate[User]

这些只是一些提示,我既不是JSON专家,也不是scala专家,我还没有尝试过代码…

天哪。我昨晚一直到凌晨3点都在试图找到一些与这项工作相关的东西(特别是你在《读者》中看到的
=>用户部分),我想今天早上已经渗透出了一些虚弱和愚蠢。“数据”部分是JSON的一部分,因为我使用的是的速记方法;修复方法是删除JavaScript中的“数据:”部分,留下“{name:'joeblow','language':1},{tracker:$scope.loadingTracker}”。“数据”隐含在该签名中(请参阅)。还想补充一点,它似乎应该是一个
ListBuffer
,每个键/值对都作为一个元组。
(JsPath \ "data" \ "name")
 Json.format[User]
val placeResult = request.body.validate[User]