如何将jsonAST.Jint转换为int

时间:2016-06-03 03:13:16

标签: json scala type-conversion

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

var jVal:JValue = parse(json);
val totalCount:Int = (jVal \\ "totalCount").asInstanceOf[Int];

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

我该如何将其转换为常规int?我当前的代码抛出一个异常说

  

net.liftweb.json.JsonAST$JInt无法投放到java.lang.Integer

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

当然,我错过了一种简单的方法吗?

1 个答案:

答案 0 :(得分:3)

由于JInt是一个案例类,因此提取值的一种便捷方法是在match中使用提取器表达式:

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

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

val JInt(totalCount) = (jVal \\ "totalCount")

这会将totalCount定义为JSON中“totalCount”的值。请注意,它将是BigInt类型。如果您愿意,可以使用toInt方法将BigInt转换为Int。但是,如果您的号码对于Int而言太大,则此方法会为您提供不同的数字而不是错误。因此,如果可能存在大量数字,则需要先使用isValidInt进行检查。

您还可以使用num字段或values方法获取值,但在您的代码中更难以使用。要使用num,您必须对JValueJInt进行投射。如果你不转换为JInt,你就不会知道values的结果类型。