2016-07-28 9 views
0

Ich benutze die Gson-Bibliothek von Scala. Meine JSON sieht aus wieGSon fromJson schlägt für Arrays in Scala

{"response":{"id":"xyz","userName":"foo","firstName":"foo","lastName":"bar","groups":["A", "B", "C"]}, "count":1} 

Um dies zu analysieren, die ich geschrieben habe den folgenden Code

case class MyAdmin(id: String, userName: String, firstName: String, lastName: String, groups: List[String]) 
case class MyResponse(response: MyAdmin, count: Int) 

Mein Code sieht aus wie

zu analysieren
val respScala = gson.fromJson(responseString, classOf[MyResponse]) 

aber ich erhalte eine Fehlermeldung

Exception in thread "main" java.lang.RuntimeException: Failed to invoke public scala.collection.immutable.List() with no args 
    at com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:111) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220) 
    at com.google.gson.Gson.fromJson(Gson.java:887) 
    at com.google.gson.Gson.fromJson(Gson.java:852) 
    at com.google.gson.Gson.fromJson(Gson.java:801) 
    at com.google.gson.Gson.fromJson(Gson.java:773) 
    at com.researchnow.FlareCommandLine$.delayedEndpoint$com$researchnow$FlareCommandLine$1(FlareCommandLine.scala:28) 
    at com.researchnow.FlareCommandLine$delayedInit$body.apply(FlareCommandLine.scala:17) 
    at scala.Function0$class.apply$mcV$sp(Function0.scala:34) 
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 
    at scala.App$$anonfun$main$1.apply(App.scala:76) 
    at scala.App$$anonfun$main$1.apply(App.scala:76) 
    at scala.collection.immutable.List.foreach(List.scala:381) 

Antwort

0

Habe etwas Forschung und fand, dass Gs Scala-Kollektionen werden nicht sehr gut verarbeitet. Ich ersetzte Gson durch Json4s ... jetzt funktioniert alles gut und ich bin in der Lage, mein json leicht zu deserialisieren.

Jemand muss Herrn Alvin Alexander mitteilen, dass er seinen Blog aktualisieren soll. Er benutzt viele alte Tools und Code, aber Google wird immer auf seinen Blog verweisen.