J'ai une carte comme ci-dessous
val map : scala.collection.mutable.Map[String,Any] = Map(
dummy1 -> ["cat1", "hash1", 101, 1373269076, {"1" : ["dummy", "dummy", "dummy"]}],
dummy2 -> ["cat1", "hash1", 102, 1373269076, {"2" : ["dummy", "dummy", "dummy"]}],
dummy3 -> ["cat1", "hash1", 103, 1373269076, {"3" : ["dummy", "dummy", "dummy"]}]
)
Je l'ai converti en chaîne Json puis l'ai écrit dans un fichier avec le code ci-dessous
Some(new PrintWriter("foo.txt")).foreach{p =>
p.write(JSONObject(map.toMap).toString()); p.close
}
Suis capable de lire la chaîne Json du fichier en utilisant
val json_string = scala.io.Source.fromFile("foo.txt").getLines.mkString
Comment puis-je récupérer ma carte à partir de la chaîne Json ci-dessus?
EDIT: Je suis capable de lire la carte avec
val map1 = JSON.parseFull(json_string).get.asInstanceOf[Map[String,Any]]
Mais ce processus prend plus de temps à mesure que la taille de la carte augmente.
Essayez d’utiliser un mappeur probable plus rapide (et plus complet).
Je recommanderais d'utiliser JacksMapper qui englobe l'excellent Jackson pour une utilisation plus agréable de Scala.
La sérialisation en JSON devient aussi simple que
val json = JacksMapper.writeValueAsString[MyClass](instance)
... et désérialisant
val obj = JacksMapper.readValue[MyClass](json)
(modifier)
Vous pouvez aussi écrire et lire des one-liners simples en utilisant FileUtils de commons-io doing
val json = FileUtils readFileToString (file, encoding)
et
FileUtils write (file, json, encoding)
En fait, j’ai eu beaucoup plus d’utilisation de json4s . La documentation est beaucoup plus claire et complète et son utilisation semble légèrement plus facile.
Une opération similaire à celle que vous demandez ressemble à ceci
import org.json4s.native.JsonFormats.parse
... get your json string ...
val parsedJson = parse(json)
val extractedJson = parsedJson.extract[MyClass]