如何将 jsonAST.Jint 转换为 int

Art*_*Lee 3 json scala type-conversion

我正在尝试学习 Scala,并且正在尝试解析 JSON 文件。我有两行代码:

var jVal:JValue = parse(json);
val totalCount:Int = (jVal \\ "totalCount").asInstanceOf[Int];
Run Code Online (Sandbox Code Playgroud)

但是,(jVal \\ "totalCount")返回一个JInt而不是一个int。如果我将它打印为字符串,它看起来像"JInt(38)".

我到底如何将其转换为常规整数?我当前的代码抛出一个异常说

net.liftweb.json.JsonAST$JInt 不能投射到 java.lang.Integer

我已经搜索了互联网,但我找不到任何答案。我真的不想手动解析和删除字符串的“JInt()”部分,只是为了将其作为整数。

当然,我错过了一个简单的方法来做到这一点?

Dan*_*etz 5

由于JInt是一个 case 类,提取值的一种方便的方法是使用提取器表达式,在 a 中match

myJValue match {
  case JInt(x) => /* do something with x */
  case JString(s) => /* do something with s */
  /* etc. */
}
Run Code Online (Sandbox Code Playgroud)

或者只是一个赋值语句,当你知道期望什么类型时:

val JInt(totalCount) = (jVal \\ "totalCount")
Run Code Online (Sandbox Code Playgroud)

这将定义totalCount为 JSON 中“totalCount”的值。请注意,它将是 类型BigInt。如果您愿意,您可以使用该方法将您的转换BigInt为。但是,如果您的数字对于 an 来说太大,则此方法将为您提供不同的数字而不是错误。因此,如果可能出现大量数字,您需要先检查.InttoIntIntisValidInt


您也可以使用num字段或values方法获取值,但在您的代码中更难使用。要使用num,您必须对您的JValueto 进行转换JInt。如果您不强制转换为JInt,您将不知道 的结果类型values