Ich muss Case-Class-Objekt mit Feld "name"
aus JSON serialisieren und dann deserialisieren, die "animalname"
Feld statt "name"
hat. Serialisierung funktioniert ok, aber Deserialisierung nicht. Ich benutzte FieldSerializer mit renameTo()
und renameFrom()
:json4s: JSON mit dem umbenannten Feld nicht analysieren
import org.json4s._
import org.json4s.FieldSerializer._
import org.json4s.jackson.Serialization._
case class WildDog(name: String)
val dogSerializer = FieldSerializer[WildDog](
renameTo("name", "animalname"),
renameFrom("animalname", "name"))
implicit val formats = DefaultFormats + dogSerializer
// serialize
val json = write(WildDog("beefy")) // {"animalname":"beefy"}, as expected
// try to deserialize
val dog = parse(json).extract[WildDog] // expected: Dog("beefy")
Eigentlich extract() wirft Ausnahme:
org.json4s.package$MappingException: No usable value for name
Did not find value which can be converted into java.lang.String
at org.json4s.reflect.package$.fail(ws.sc:94)
at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(ws.sc:409)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$11.apply(ws.sc:417)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$11.apply(ws.sc:417)
at scala.collection.TraversableLike$$anonfun$map$1.apply(ws.sc:240)
at scala.collection.TraversableLike$$anonfun$map$1.apply(ws.sc:240)
at scala.collection.mutable.ResizableArray$class.foreach(ws.sc:55)
at scala.collection.mutable.ArrayBuffer.foreach(ws.sc:43)
at scala.collection.TraversableLike$class.map(ws.sc:240)
at scala.collection.AbstractTraversable.map(ws.sc:101)
at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$instantiate(ws.sc:417)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(ws.sc:445)
at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$result$6.apply(ws.sc:442)
at org.json4s.Extraction$.org$json4s$Extraction$$customOrElse(ws.sc:454)
at org.json4s.Extraction$ClassInstanceBuilder.result(ws.sc:442)
at org.json4s.Extraction$.extract(ws.sc:304)
at org.json4s.Extraction$.extract(ws.sc:38)
at org.json4s.ExtractableJsonAstNode.extract(ws.sc:17)
Wie dieses JSON korrekt deserialisiert?
Update: Ich benutze Scala 2.10, json4s 3.2.5.
Update 2: Ich benutze diese Maven Abhängigkeit für json4s:
<dependency>
<groupId>org.json4s</groupId>
<artifactId>json4s-jackson_2.10</artifactId>
<version>3.2.5</version>
</dependency>
versucht, gleiche MappingException :( –
Welche scala-Version Sie verwenden Ich bin in der Lage, es zu bekommen, mit zu arbeiten? 2.11 statt 2.10 – pjames
Ich benutze Scala 2.10, json4s 3.2.5 Ich schätze, ich werde keine Gelegenheit haben, jetzt zu 2.11 zu wechseln ... –