我正在尝试学习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()”部分,而只是将其作为整数获取。
我肯定会错过一种简单的方法吗?
最佳答案
由于JInt
是一个case类,因此提取值的便捷方法是在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
类型。如果需要,可以使用BigInt
方法将Int
转换为toInt
。但是,如果您的数字对于Int
太大,则此方法将为您提供一个不同的数字,而不是错误。因此,如果完全有可能,请首先使用isValidInt
进行检查。您也可以使用
num
字段或values
方法获取值,但是在您的代码中很难使用。要使用num
,您必须将JValue
转换为JInt
。而且,如果不强制转换为JInt
,您将不知道values
结果的类型。