2013-09-21 2 views
0

while 루프를 사용하여 Json으로 스칼라 목록을 변환하려고 많이 시도했습니다. 다음과 같이 코드는 다음과 같습니다루프를 사용하여 스칼라 목록을 json으로 변환

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

json 변수는 루프의 외부에 액세스 할 수 있어야합니다, 그래서 루프의 외부에서 선언하고 null로 초기화하지만 스칼라 컴파일러 나에게 형식 불일치 예외를 제공합니다 ...

+0

당신은 문자열을 할당하려고 다음 null로 JSON을 초기화하고있어 가치. BTW, 당신은 아마 json을 val로 사용하고 var를 사용하는 대신 조건부 초기화를 수행하려고합니다. –

답변

3

왜 while 루프를 사용하여 단일 목록을 JSON으로 변환합니까? 나는 또한 val jsonvar json을 변경 한

val json = new Gson().toJson(list) 

참고 : (더 일반적으로 JSON 또는 반복 변환) 루프를해야 할 이유를 설명 할 때까지, 나는 다음과 같은 사소한 조각을 건의 할 것입니다. 당신이 알고 싶은 모든 유형 불일치 예외 제거하는 방법을 경우

그러나

, 단지 변경 :

var json = null 

var json: String = null 

또는

var json: String = _ 

하면

jsonString으로 선언하지 않으면 Scala가 암시 적으로 b로 가져갑니다. e (즉, 유추) 유형이 Null이고 String 유형의 값을 Null 유형의 변수에 할당 할 수 없습니다.

+0

하지만 var json : String = null 또는 _ os가 허용되지 않습니다. –

+0

적어도 둘 다 스칼라 2.10.2를 사용하여 내 컴퓨터에 있습니다. –

0

이 기능은 목록을 위해 잘 작동하고 모두 스칼라 일반 구축하여지도 :

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

관련 문제