/ / Ako zapisovať / čítať do / z disku Spray json object? - scala, serializácia, spray-json

Ako napíšem / čítať do / z disku Spray json object? - scala, serializácia, spray-json

Chcem byť schopný čítať / zapisovať objekt Json z / na disk.

Pripúšťam, že v Jave by to bolo asi desať minút.

Scala je trochu náročnejšia. Myslím, že hlavným dôvodom nie je dostatok informácií na internete.

Mimochodom, toto som urobil zatiaľ:

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

odpovede:

1 pre odpoveď č. 1

Aw, to je sklamanie. Prispel som do diagramu Spray-json readme že som dúfala, že bude užitočná pre začínajúcich. Ale stále musíte zistiť, čo robiť s implicitnými.

Spray-json používa typové triedy naserializovať / deserializovať objekty. Možno budete chcieť prečítať o typových triedach, ale dôležité je vedieť, že implicitné objekty JsonFormat musia byť v rozsahu pre všetky triedy používané objektom a veci, ktoré odkazuje. Štandard DefaultJsonProtocol obsahuje implicitné JsonFormats pre bežné typy Scala a musíte poskytnúť svoje vlastné implicitné JsonFormats pre svoje vlastné typy. Metódy jsonFormat1,2, ... poskytujú jednoduchý spôsob vytvorenia takýchto JsonFormats pre triedy prípadov.

Existuje niekoľko problémov s vaším programom. Tu je jednoduchý, ktorý funguje:

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
}