如何写入/读取磁盘Spray json对象?

时间:2014-11-29 19:20:24

标签: scala serialization spray-json

我希望能够从/向磁盘读取/写入Json对象。

我承认,在Java中我花了大约10分钟。

Scala更具挑战性。我认为主要原因是网上信息不足。

无论如何,这是我到目前为止所做的:

package com.example

import java.io.{BufferedWriter, FileWriter}

import spray.json._
import spray.json.DefaultJsonProtocol
import java.nio.file.{Paths, Files}
import java.nio.charset.StandardCharsets

object Test {

  object Foo extends DefaultJsonProtocol {
    implicit val fooFormat = jsonFormat2(Foo.apply)
  }

  case class Foo(name: String, x: String) {
    //def toJson:JsValue = JsObject( "name" -> JsString(name) )
  }


  def main(args: Array[String]) {
    println("Hello, world!")

    implicit val foo = new Foo("xxx", "jj")

    println(foo.toJson)

    val w = new BufferedWriter(new FileWriter("output.txt"))
    w.write(x.toJson) // This doesn't work. I also tried: x.toJson.toString
  }
}

1 个答案:

答案 0 :(得分:1)

噢,那令人失望。我为spray-json readme提供了一个图表,希望对新手有所帮助。但是你仍然需要弄清楚如何处理暗示。

Spray-json使用类型类来序列化/反序列化对象。您可能希望阅读类型类,但重要的是要知道隐式JsonFormat对象必须在对象使用的所有类及其引用的内容的范围内。 DefaultJsonProtocol特性包含常见Scala类型的隐式JsonFormats,您必须为自己的类型提供自己的隐式JsonFormats。 jsonFormat1,2,...方法提供了一种为case类创建这样的JsonFormats的简单方法。

您的计划存在许多问题。这是一个有效的简单方法:

import spray.json._
import java.io.{BufferedWriter, FileWriter}

object Test extends App with DefaultJsonProtocol {
  case class Foo(name: String, x: String)
  implicit val fooFormat = jsonFormat2(Foo.apply)
  val foo = Foo("xxx", "jj")
  println(foo.toJson)
  val w = new BufferedWriter(new FileWriter("output.txt"))
  w.write(foo.toJson.prettyPrint)
  w.close
}