如何处理 JSON 数据中的错误 is node

How to handle error in JSON data has incorrect is node

我希望遵循 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格式

如果在使用 \ 时找不到值,则结果将是 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])