使用循环将scala列表转换为json
我尝试了很多使用while循环将scala列表转换为Json;代码如下:使用循环将scala列表转换为json,json,scala,gson,Json,Scala,Gson,我尝试了很多使用while循环将scala列表转换为Json;代码如下: var json = null while (list != null) { json = new Gson().toJson(list) } 必须在循环之外访问json变量,因此我在循环之外声明了它,并用null初始化了它,但是Scala编译器给了我一个类型不匹配的异常…为什么要使用while循环将单个列表转换为json?在您解释为什么需要循环(或者更一般地说,重复转换为JSON)之前,我建议您使用以下小片
var json = null
while (list != null) {
json = new Gson().toJson(list)
}
必须在循环之外访问
json
变量,因此我在循环之外声明了它,并用null
初始化了它,但是Scala编译器给了我一个类型不匹配的异常…为什么要使用while循环将单个列表转换为json?在您解释为什么需要循环(或者更一般地说,重复转换为JSON)之前,我建议您使用以下小片段:
val json = new Gson().toJson(list)
注意,我还将var-json
更改为val-json
但是,如果您只想知道如何消除类型不匹配异常,只需更改:
var json = null
到
或
如果不将
json
声明为String
类型,Scala会隐式地将其视为Null
类型(即推断),并且不可能将String
类型的值分配给Null类型的变量,为什么要使用while循环将单个列表转换为json?在您解释为什么需要循环(或者更一般地说,重复转换为JSON)之前,我建议您使用以下小片段:
val json = new Gson().toJson(list)
注意,我还将var-json
更改为val-json
但是,如果您只想知道如何消除类型不匹配异常,只需更改:
var json = null
到
或
如果不将json
声明为String
类型,Scala将隐式地将其视为(即推断)为Null
类型,并且不可能将String
类型的值分配给Null类型的变量。此函数使用普通Scala结构对列表和映射都很好:
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 + "\""
}
}
完整示例位于此处:此函数适用于使用普通Scala构造的列表和映射:
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 + "\""
}
}
完整的示例位于此处:您正在将json初始化为null,然后尝试为其分配字符串值。顺便说一句,您可能希望json是val,并执行条件初始化,而不是使用var。您正在将json初始化为null,然后尝试为其分配字符串值。顺便说一句,您可能希望json是val,并进行条件初始化,而不是使用var。它们都至少在使用Scala 2.10.2的我的计算机上。它们都至少在使用Scala 2.10.2的我的计算机上。