使用循环将scala列表转换为json

时间:2013-09-21 05:11:11

标签: json scala gson

我尝试了很多使用while循环将我的scala列表转换为Json;代码如下:

 var json = null
 while (list != null) {
   json = new Gson().toJson(list)
 }

json变量必须在循环之外访问,所以我在循环之外声明它并用null初始化,但Scala编译器给我一个类型不匹配异常...

2 个答案:

答案 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 + "\""
  }
}

完整示例位于:https://gist.github.com/tuxdna/7926531