Comment sérialiser une Carte en JSON dans Scala?
J'ai donc une Carte à la Scala comme ceci:
val m = Map[String, String](
"a" -> "theA",
"b" -> "theB",
"c" -> "theC",
"d" -> "theD",
"e" -> "theE"
)
et je tiens à sérialiser cette structure dans une chaîne JSON à l'aide de l'ascenseur-json.
Un sait comment faire cela?
- ce post est peut-être utile albertech.blogspot.com/2017/02/...
Vous devez vous connecter pour publier un commentaire.
Comment à ce sujet?
de sortie:
EDIT:
Pour un
scala.collections.mutable.Map
, vous devez le convertir en d'abord à un immuable carte:.toMap
Si vous utilisez la dernière version de Scala 2.10.x et au-dessus :
Map("0" -> 1, "1" -> List(Map("2" -> 3)))
est stringified à{"0" : 1, "1" : List(Map(2 -> 3))}
.Vous pouvez rouler votre propre assez facilement (yay, pas de dépendances). Celui-ci fait de base de la manipulation de types et va faire de la récursivité à la différence de
JSONObject
qui a été mentionné:Vous pouvez le voir en action comme
(Il fait partie d'une Coinbase GDAX bibliothèque que j'ai écrit, voir util.scala)
Vous pouvez utiliser ce moyen simple si vous utilisez jouer au cadre:
Ce code permet de convertir de nombreux objets différents, et ne nécessite pas de bibliothèques au-delà de l'intégré dans le
scala.util.parsing.json._
. Il ne sera pas de traiter correctement les cas limites, telles que des Cartes avec des nombres entiers comme les clés.Similaire à Einar de la solution, vous pouvez utiliser JSONObject de Analyseur Combinators pour ce faire. Notez qu'il n'est pas récursif, vous aurez besoin de le faire vous-même. La bibliothèque comprend également JSONArray, pour la liste comme des structures de données. Quelque chose comme ce qui suit traitera de Noel des préoccupations au sujet de structures imbriquées. Cet exemple n'est pas récursif à un niveau arbitraire, mais la poignée d'une valeur de Liste[Carte[Chaîne, Toute]].
Complétant la réponse de @Raja.
Pour ceux objet imbriqué, j'ai modifier localement la classe d'avoir mon voulait
toString()
comme de cette façon:case class MList[T]() extends MutableList[T] {
override def toString() = "[" + this.toList.mkString(",") + "]"
}
Puis à l'intérieur de l'objet Map, j'utilise ce
MList
au lieu de la normeList
. De cette façon, monmap
objet imprime fine en appelantJSONObject(map).toString()
.