2017-04-21 10 views
1

매우 큰 스프레이 JsValue를 직렬화 (예 : 예쁜 인쇄)하고 싶습니다.가없는 java.io.BufferedWriter 은 중간 문자열을 먼저 생성해야합니다.Java Writer에 JsValue 스프레이를 직렬화 (예쁜 인쇄)하는 방법

이것은 상당히 직설적 인 것처럼 보이지만, spray의 JsonPrinter는 StringBuilder를 기반으로합니다.

스프레이 및/또는 표준 라이브러리가이를 지원합니까? 아니면 JsValue를 java.io.Writer (또는 OutputStream)에 '스트림 쓰기'할 수있는 적절한 어댑터를 작성 했습니까? (테스트되지 않은) 같은

+0

ByteStream''에 사용자 정의'JsValue'을 작성하여. 어떻게? –

답변

0

뭔가 :

import java.io.PrintWriter 
import spray.json._ 

def streamOut(js: JsValue, out: PrintWriter): Unit = { 
    js match { 
    case JsObject(elems) => 
     out.print("{") 
     for { 
     ((k, v), i) <- elems.zipWithIndex 
     } { 
     val comma = if (i == 0) "" else "," 
     out.print(s"$comma$k:") 
     streamOut(v, out) 
     } 
     out.print("}") 
    case JsArray(elems) => 
     out.print("[") 
     for { 
     (v, i) <- elems.zipWithIndex 
     } { 
     val comma = if (i == 0) "" else "," 
     out.print(comma) 
     streamOut(v, out) 
     } 
     out.print("]") 
    case _ => out.print(js.compactPrint) 
    } 
}