为什么Angular JSON作为ListBuffer出现?(以及如何解析…)
编辑我最初描述的是错误的——重写如下 出于某种原因,我无法以将JSON负载解释为简单字符串的方式发送JSON负载。看一下主体,它总是一个为什么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
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]