我尝试了很多使用while循环将我的scala列表转换为Json;代码如下:
var json = null
while (list != null) {
json = new Gson().toJson(list)
}
json
变量必须在循环之外访问,所以我在循环之外声明它并用null
初始化,但Scala编译器给我一个类型不匹配异常...
答案 0 :(得分:3)
为什么使用while循环将单个列表转换为JSON?直到你解释为什么你需要一个循环(或者,重复转换为JSON,更一般地来说),我建议使用以下简单的代码片段:
val json = new Gson().toJson(list)
请注意,我还将var json
更改为val json
。
但是,如果您只想知道如何消除类型不匹配异常,只需更改:
var json = null
到
var json: String = null
或
var json: String = _
如果您未将json
声明为String
类型,则Scala将隐式地将其视为(即推断)类型Null
,并且无法分配值String
类型的Null
类型的变量。
答案 1 :(得分:0)
此函数适用于使用普通Scala结构的List和Map:
def toJson(a: Any): String = {
a match {
// number
case m: Number => m.toString
// string
case m: String => "\"" + m + "\""
case m: Map[AnyRef, AnyRef] => {
"{" + (m map { x => val key = x._1; toJson(key) + ": " + toJson(m(key)) } mkString (", ")) + "}"
}
case l: Seq[AnyRef] => { "[" + (l map (toJson(_)) mkString (",")) + "]" }
// for anything else: tuple
case m: Product => toJson(m.productIterator.toList)
case m: AnyRef => "\"" + m.toString + "\""
}
}