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

标签 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格式

最佳答案

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

关于json - 如何处理JSON数据中的错误不正确的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28631241/

相关文章:

ios - Completion Handler 调用太晚

c# - 无法加载非常大的 JSON(92,000 行)

scala - 在 Scala 选项类型 isEmpty 方法中检查 None

python - For 循环遍历 Python 中文本文件的重复部分

java - 在 Java 中解析 JSON 数据

sql - 如何避免在使用 haskell 解析 sql 时将 WHERE 视为属性

java - 如何使用 google gson 库解析下面给出的 json

json - 在Grails中编码Joda LocalTime

scala 中的 Java 类类型不匹配?

scala - 使用功能方式处理日志消息的最佳实践是什么