0

我希望能够从磁盘读取/写入 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
  }
}

4

1 回答 1

2

唉,真令人失望。我为spray-json 自述文件贡献了一个图表,希望对新手有所帮助。但是您仍然必须弄清楚如何处理隐式。

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

你的程序有很多问题。这是一个有效的简单方法:

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
}
于 2014-11-30T05:07:07.133 回答