我正在尝试学习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()”部分,只是为了得到整数。
当然,我错过了一种简单的方法吗?
答案 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
,您必须对JValue
至JInt
进行投射。如果你不转换为JInt
,你就不会知道values
的结果类型。