如何处理JSON数据中的错误是不正确的节点

时间:2015-02-20 14:24:55

标签: json scala parsing error-handling

我期待以下json格式:

'{
  "teamId" : 9,
  "teamMembers" : [ {
    "userId" : 1000
  }, {
    "userId" : 2000
  }]
}'

如果我使用以下格式测试我的代码: -

'{
  "teaXmId" : 9,
  "teamMembers" : [ {
    "usXerId" : 1000
  }, {
    "userXId" : 2000
  }]
}' 

我正在解析json值,如下所示: -

val userId = (request.body \\ "userId" )
val teamId = (request.body \ "teamId")
val list = userId.toList
list.foreach( x => Logger.info("x val: "+x)

它不会抛出任何错误来处理。代码执行就是一个。稍后,如果我尝试使用teamId或userId,那么它当然不起作用。

那么如何检查解析是否正确完成或立即停止执行并通知用户提供正确的json格式

1 个答案:

答案 0 :(得分:0)

如果在使用\时未找到值,则结果将为JsUndefined(msg)类型。您可以通过确保您拥有所期望的类型立即抛出错误:

 val teamId = (request.body \ "teamId").as[Int]

或:

val JsNumber(teamId) = request.body \ "teamId" //teamId will be BigDecimal

使用\\时,如果找不到任何内容,则返回空的List,这是有道理的。如果要在数组的任何对象上找不到某个键时抛出错误,您可能会得到包含该列表的对象并从那里继续:

val teamMembers =  (request.body \"teamMembers").as[Seq[JsValue]]

或:

val JsObject(teamMembers) = request.body \ "teamMembers"    

然后:

val userIds = teamMembers.map(v => (v \ "userId").as[Int])