2014-04-24 7 views
5

Sembra che Play Json Library non sia in grado di serializzare le Collezioni Scala. C'è qualche alternativa. Ho solo bisogno di scaricare i dati da una mappa.Come serializzare Scala Map to Json in PlayFramework?

import scala.concurrent._ 
import play.api.libs.ws._ 
import scala.concurrent.ExecutionContext.Implicits.global 
import play.libs.Json 

object temp { 

     // Correct Serialization 
     val javaMap = new java.util.HashMap[String, String]() 

     javaMap.put("Abc", "Def") 

     // Outputs: res1: String = {"Abc":"Def"} 
     Json.stringify(Json.toJson(javaMap)) 


     // Incorrect Serialization 
     val scalaMap = Map("Abc" -> "Def")   //> scalaMap : scala.collection.immutable.Map[String,String] = Map(Abc -> Def) 

     // Output: res2: String = {"empty":false,"traversableAgain":true} 
     Json.stringify(Json.toJson(scalaMap))  //> res2: String = {"empty":false,"traversableAgain":true} 

    } 
+1

Il tuo codice di esempio non ha alcun senso. Play-Json non può gestire le raccolte Java per impostazione predefinita e non ha problemi nel gestire un 'scala.collection.immutable.Map [String, String]'. È tutto questo il tuo codice? – Ryan

+0

Quello che sto dicendo è completamente opposto. La raccolta Java viene gestita correttamente. Controlla l'output su repl. – nishnet2002

risposta

9

Stai importando la libreria JSON errata.

import play.api.libs.json._

+0

Fantastico grazie. È un po 'confusa quali usare. – nishnet2002

+0

Grazie di cuore, mi risparmia un sacco di ore ... Problemi molto brutti ... – funny337

+0

Vedi https://www.playframework.com/documentation/2.5.x/ScalaJson#Using-Writes-converters "Uso di scritture convertitori La conversione da Scala a JsValue viene eseguita dal metodo di utilità Json.toJson [T] (T) (scritture implicite: Writes [T]). Questa funzionalità dipende da un convertitore di tipo Writes [T] che può convertire un T in un JsValue." –