2017-04-21 24 views
1

我希望能夠序列化(即漂亮打印)一個相當大的噴霧JsValue,例如,一個java.io.BufferedWriter 而不是必須首先生成一箇中間字符串。如何序列化(漂亮打印)噴灑JsValue到java Writer

這似乎應該是一個相當直接的事情,但噴霧的JsonPrinter是基於一個StringBuilder。

那麼,噴霧和/或標準庫是否支持這個?還是有人寫了一個適當的適配器,能夠將JsValue'流寫'到java.io.Writer(或OutputStream)?

+0

通過編寫自定義'JsValue'到'ByteStream'。能怎樣 ? –

回答

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) 
    } 
}