Jackson Scala-Modul geschachtelte Listen und Maps
Möchte ich Listen konvertieren von json-Objekten, die in sich selbst enthalten können Json-Objekte oder Listen von Json-Objekten und möchte die Ergebnisse zu Scala-Karten oder-Listen als angemessen, jedoch kann ich nur die top-level-Objekt zu konvertieren, um eine Karte oder eine Liste.
Gibt es eine einfache Möglichkeit, dies zu tun?
Beispielsweise in REPL
objectMapper.readValue("{\"test\":\"113123\",\"myList\":[{\"test2\":\"321323\"},{\"test3\":\"11122\"}]}", classOf[Map[String,Any]])
Zurück
res: Map[String,Any] = Map(test -> 113123, myList -> [{test2=321323}, {test3=11122}])
Wo ich möchte
res: Map[String,Any] = Map(test -> 113123, myList -> List(Map(test2 -> 321323), Map(test3 -> 111222)))
- Tun Sie wirklich brauchen, zu verwenden Jackson? Mit lift-json mit case-Klassen ist sehr viel einfacher.
- Wenn das mapping funktioniert, es gibt nichts kompliziert in der Verwendung Jackson-Daten-Bindung: wie würden lift-json ist einfacher, als ein liner oben gezeigt?
- Ich habe verwendet, heben und Jackson, und fand-lift wurde mit Speicher Probleme bei der Verarbeitung von 15.000+ json-Objekte, wo, wie Jackson war der Umgang mit diesem feinen
- Ich konstruierte das Objekt-mapper zu verwenden, mit mapModule und seqModule
- Ich habe noch zu versuchen, jerkson, ist es eine jar Datei?(Ich bin neu in der jvm und haben nicht funktioniert aus der Gebäude-Gläser von github noch..)
- Jerkson hängt davon ab, Jackson 1.9.x. Man kann es von repo.codahale.com/com/codahale/jerkson_2.9.0-1/0.4.2/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, so dass mit einer späteren version der scala jackson-Modul ich habe dieses Klasse
die Sie anwenden können, um die Objekt-mapper
Wenn diese nicht wie erwartet funktionieren, bitte die Datei ein Problem gegen Jackson Scala-Modul an [https://github.com/FasterXML/jackson-module-scala/issues]. Es ist möglich, dass es Probleme mit der Handhabung von Inhalten in "nicht typisiert" - Modus (d.h. nicht-Bohne, mit Listen, Maps usw.), die scala-Modul muss hinzufügen, einen besonderen Umgang. Die zugrunde liegende Herausforderung ist, dass Scala-collections im Allgemeinen nicht die Karte sauber mit JDK-collections.
Habe ich nicht verwendet, Jackson Scala-Modul, aber das Verhalten ist das gleiche in Jerkson, also werde ich raten, was Los ist. Wenn die REPL ist Druck:
es ist sagen Sie, dass es ein Tupel mit "myList" und eine java.util.ArrayList. Die ArrayList enthält zwei java.util.LinkedHashMaps. (Ich erkläre dies, weil es war nicht offensichtlich für mich auf den ersten und ich hatte zu verbringen einige Qualität Zeit mit der REPL verwenden von getClass und asInstanceOf zu Tauchen in diese Struktur.)
Ich bin ziemlich sicher, es gibt nicht einen Weg, um Jackson Scala-Modul oder Jerkson zurück Deserialisierung von JSON mit native Scala-collections. Sie können importieren scala.sammeln.JavaConversions zu machen, die diese Werte erscheinen etwas mehr Scala-like. Selbst wenn Sie das tun, werden Sie noch haben, zu werfen Dinge um. Zum Beispiel:
Wenn Sie nicht wollen, zu tüfteln, mit allen casting, ich glaube, das, was Sie tun müssen, ist die Definition einer Klasse zu Deserialisieren auf. So zum Beispiel mit Jerkson:
(Der Grund, warum ich schrieb, dass so ein volles Programm ist, dass Jerkson nicht handhaben Deserialisieren Fall Klassen, die in der REPL.)
Ich weiß, Sie können Deserialisieren eines Objekts mit Jackson, aber das Letzte mal sah ich es, nahm ein paar weitere Schritte.
Ist dieser auf der rechten Spur auf die Beantwortung Ihrer Frage?
Letztlich folgte ich Leif Ratschlag und schrieb diesen code, um das problem zu lösen