【问题标题】:How do I write/read to/from disk Spray json object?如何写入/读取磁盘 Spray json 对象?
【发布时间】:2014-11-29 19:20:23
【问题描述】:

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

【问题讨论】:

  • 您的代码无法编译。最后一行的x 是什么?你想writeread JSON 吗?
  • 对不起 Soumya,意思是:foo.toJson。无论如何,这有效:x.toJson.toString()

标签: scala serialization spray-json


【解决方案1】:

啊,真令人失望。我向spray-json readme 贡献了一张图表,希望对新手有所帮助。但是你仍然需要弄清楚如何处理隐式。

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
}

【讨论】:

  • 感谢 AmigoNico。 “自述文件”看起来很棒。我只是没看到。它有点迷失所有文件... :)
  • 您的修复看起来也很棒。谢谢:)
  • 很高兴有帮助,巴山。祝你好运。
  • 我很怀疑为什么不将文件 IO 视为 spray-json 的基本要求,而我们不得不求助于 BufferedWriter?此外,您的代码无法编译。
  • @Arunav:与其拥有一个 JSON 序列化/反序列化库、一个复杂的数学库、一个信号调节库和其他一百个库,不如每个都执行文件 I/O,以防您想将结果存储到一个文件,每个都有自己的 API,让每个人都有一个单一的职责并使用自己的小方法将字符串转储到文件中不是更好吗?
猜你喜欢
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多