尝试将json4s值转换为整数

时间:2014-07-17 05:49:51

标签: json scala json4s

我有随机的JSON字符串,当它们确实是数字时包含字符串值,但我无法知道进入我的系统时它们可能是哪些字段。

例如:

{
   "some_key":"1234",
   "another_key":{
      "sub_key":"4243",
      "a_string":"this is a valid string and should not be converted"
   }
}

有没有人知道使用json4s尝试将json值转换为整数的简单方法?

2 个答案:

答案 0 :(得分:2)

想出来。这段代码正是我需要的:

private def convertNumbers(json: JValue) =
  json.transformField {
    case JField(k, v) ⇒ k → (v match {
      case s: JString ⇒ Try(JInt(s.s.toInt)).getOrElse(s)
      case o          ⇒ o
    })
  }

答案 1 :(得分:1)

不幸的是,因为这些键被编码为字符串,所以您需要转换它们。所以,你可以这样做:

val json = parse("""{some_key":"1234"}""")
Try((json \ "some_key").values.toString.toInt) match {
  case Success(i) => JInt(i)
  case Failure(i) => s
}

如果它可以转换为Int,则返回JInt,否则返回JString