/ / Comment écrire / lire sur / à partir du disque Vaporiser un objet json? - scala, sérialisation, spray-json

Comment puis-je écrire / lire sur / à partir du disque Spray json object? - scala, sérialisation, spray-json

Je veux être capable de lire / écrire un objet Json à partir du / sur le disque.

J'avoue qu'en Java, cela m'aurait pris environ 10 minutes.

Scala est un peu plus difficile. Je pense que la raison principale n'est pas assez d'informations sur le net.

Quoi qu'il en soit, voici ce que j'ai fait jusqu'à présent:

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

Réponses:

1 pour la réponse № 1

Aw, c’est décevant. J’ai contribué par un diagramme au fichier readme de spray-json que j'espérais pouvoir aider les nouveaux arrivants. Mais vous devez encore trouver quoi faire à propos des implications.

Spray-json utilise des classes poursérialiser / désérialiser des objets. Vous voudrez peut-être lire sur les classes de types, mais il est important de savoir que les objets JsonFormat implicites doivent être à la portée de toutes les classes utilisées par l'objet et des éléments qu'il référence. Le trait DefaultJsonProtocol contient des JsonFormats implicites pour les types Scala courants et vous devez fournir vos propres JsonFormats implicites pour vos propres types. Les méthodes jsonFormat1,2, ... permettent de créer facilement de tels JsonFormats pour les classes de cas.

Votre programme pose plusieurs problèmes. Voici un exemple simple qui fonctionne:

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
}