Scala 如何向java编写器序列化(漂亮打印)JsValue

Scala 如何向java编写器序列化(漂亮打印)JsValue,scala,spray,Scala,Spray,我希望能够将相当大的值序列化(即漂亮打印),例如java.io.BufferedWriter,而不必首先生成中间字符串 这看起来应该是一件相当简单的事情,但是spray的JsonPrinter基于StringBuilder 那么,spray和/或标准库是否支持这一点?还是有人编写了适当的适配器,以便能够将JsValue“流式写入”到java.io.Writer(或OutputStream)?类似(未测试): 导入java.io.PrintWriter 导入spray.json_ def stre

我希望能够将相当大的值序列化(即漂亮打印),例如java.io.BufferedWriter,而不必首先生成中间字符串

这看起来应该是一件相当简单的事情,但是spray的JsonPrinter基于StringBuilder

那么,spray和/或标准库是否支持这一点?还是有人编写了适当的适配器,以便能够将JsValue“流式写入”到java.io.Writer(或OutputStream)?

类似(未测试):

导入java.io.PrintWriter
导入spray.json_
def streamOut(js:JsValue,out:PrintWriter):单位={
js匹配{
案例JsObject(元素)=>
输出。打印(“{”)
为了{
((k,v),i)
输出。打印(“[”)
为了{
(v,i)输出打印(js.compactPrint)
}
}
类似(未经测试):

导入java.io.PrintWriter
导入spray.json_
def streamOut(js:JsValue,out:PrintWriter):单位={
js匹配{
案例JsObject(元素)=>
输出。打印(“{”)
为了{
((k,v),i)
输出。打印(“[”)
为了{
(v,i)输出打印(js.compactPrint)
}
}

通过将自定义
JsValue
写入
ByteStream
。还有其他方法吗?通过将自定义
JsValue
写入
ByteStream
。还有其他方法吗?
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)
  }
}