Ich muss einen JSON-String erstellen, ungefähr so:
[
{ 'id': 1, 'name': 'John'},
{ 'id': 2, 'name': 'Dani'}
]
val jArray = JsArray();
jArray += (("id", "1"), ("name", "John"))
jArray += (("id", "2"), ("name", "Dani"))
println(jArray.dump)
Ich muss in der Lage sein, Zeilen hinzuzufügen jArray
, so etwas wiejArray += ...
Was ist die nächstgelegene Bibliothek / Lösung dafür?
Antworten:
Leider ist das Schreiben einer JSON-Bibliothek die Version der Scala-Community zum Codieren einer Aufgabenlisten-App.
Es gibt eine Vielzahl von Alternativen. Ich liste sie in keiner bestimmten Reihenfolge mit Anmerkungen auf:
💣 = hat keine Sicherheitslücken behoben, § = hat Scalaz-Integration, ± = unterstützt Interop mit Jackson
JsonNode
In Snowplow verwenden wir json4s mit dem Jackson-Backend. Wir haben auch gute Erfahrungen mit Argonaut gemacht.
quelle
Lift-json ist in Version 2.6 und funktioniert sehr gut (und wird auch sehr gut unterstützt. Der Betreuer ist immer bereit, alle Fehler zu beheben, die Benutzer möglicherweise finden. Beispiele, die es verwenden, finden Sie im Github-Repository
Der Betreuer (Joni Freeman) ist auf der Lift-Mailingliste immer erreichbar . Es gibt auch andere Benutzer auf der Mailingliste, die ebenfalls sehr hilfreich sind.
Wie @Alexey hervorhebt
2.11.x
, ändernscalaVersion
und verwenden Sie die Bibliothek%%
wie folgt , wenn Sie die Bibliothek mit einer anderen Scala-Version verwenden möchten :Auf der Website liftweb.net finden Sie im Laufe der Zeit die neueste Version.
quelle
Ich schlage vor, jerkson zu verwenden , es unterstützt die meisten grundlegenden Typkonvertierungen:
quelle
Nummer 7 auf der Liste ist Jackson, der Jerkson nicht benutzt. Es unterstützt Scala-Objekte (Fallklassen usw.).
Unten ist ein Beispiel, wie ich es benutze.
Das macht es sehr einfach. Darüber hinaus ist der XmlSerializer und die Unterstützung für JAXB Annotations ist sehr praktisch.
Dieser Blog-Beitrag beschreibt die Verwendung mit JAXB Annotations und dem Play Framework.
http://krasserm.blogspot.co.uk/2012/02/using-jaxb-for-xml-and-json-apis-in.html
Hier ist mein aktueller JacksonMapper.
quelle
Vielleicht bin ich etwas spät dran, aber Sie sollten wirklich versuchen, die JSON-Bibliothek aus dem Play Framework zu verwenden. Sie können sich die Dokumentation ansehen . In der aktuellen Version 2.1.1 können Sie es ohne das gesamte Play 2 nicht separat verwenden. Die Abhängigkeit sieht also folgendermaßen aus:
Es wird Ihnen den gesamten Spielrahmen mit allen Dingen an Bord bringen.
Aber wie ich weiß, haben Leute von Typesafe einen Plan, ihn in Version 2.2 zu trennen. Es gibt also einen eigenständigen Play-JSON aus 2.2-Snapshot.
quelle
Sie sollten Genson überprüfen . Es funktioniert einfach und ist viel einfacher zu bedienen als die meisten der in Scala vorhandenen Alternativen. Es ist schnell, hat viele Funktionen und Integrationen mit einigen anderen Bibliotheken (jodatime, json4s DOM api ...).
All das ohne ausgefallenen unnötigen Code wie Implicits, benutzerdefinierte Reader / Writer für grundlegende Fälle, unleserliche API aufgrund von Operatorüberlastung ...
Die Verwendung ist so einfach wie:
Haftungsausschluss: Ich bin Gensons Autor, aber das bedeutet nicht, dass ich nicht objektiv bin :)
quelle
Hier ist eine grundlegende Implementierung des Schreibens und anschließenden Lesens von
json
Dateien mitjson4s
.quelle
Jawn ist eine sehr flexible JSON-Parser-Bibliothek in Scala. Es ermöglicht auch die Generierung von benutzerdefinierten ASTs. Sie müssen es nur mit einem kleinen Merkmal versehen, um es dem AST zuzuordnen.
Hat hervorragend für ein aktuelles Projekt funktioniert, das ein wenig JSON-Analyse benötigte.
quelle
Die Entrückung scheint in der Liste der Antworten zu fehlen. Es kann von http://rapture.io/ bezogen werden und ermöglicht Ihnen (unter anderem):
Ich möchte keine Rapture-Beispiele von der Seite kopieren / einfügen. Eine schöne Präsentation über die Funktionen von Rapture hielt Jon Pretty auf der SBTB 2014: https://www.youtube.com/watch?v=ka5-OLJgybI
quelle
@ AlaxDeans Antwort Nr. 7, Argonaut ist die einzige, bei der ich schnell mit sbt und Intellij arbeiten konnte. Eigentlich hat json4s auch wenig Zeit in Anspruch genommen, aber der Umgang mit einem rohen AST ist nicht das, was ich wollte. Ich habe Argonaut zum Arbeiten gebracht, indem ich eine einzelne Zeile in meine build.st eingefügt habe:
libraryDependencies += "io.argonaut" %% "argonaut" % "6.0.1"
Und dann ein einfacher Test, um zu sehen, ob ich JSON bekommen könnte:
Und dann
Stellen Sie sicher, dass Sie mit Option vertraut sind. Dies ist nur ein Wert, der auch null sein kann (null sicher, denke ich). Argonaut verwendet Scalaz. Wenn Sie also etwas sehen, das Sie nicht verstehen, wie das Symbol
\/
(eine oder eine Operation), ist es wahrscheinlich Scalaz.quelle
Sie können dies versuchen: https://github.com/momodi/Json4Scala
Es ist einfach und hat nur eine Scala-Datei mit weniger als 300 Zeilen Code.
Es gibt Beispiele:
quelle
Ich verwende uPickle, was den großen Vorteil hat, dass verschachtelte Fallklassen automatisch verarbeitet werden:
Fügen Sie dies zu Ihrem hinzu
build.sbt
, um uPickle zu verwenden:quelle
Ich verwende die PLAY JSON-Bibliothek. Hier finden Sie das mavn-Repo nur für die JSON-Bibliothek, nicht für das gesamte Framework
Eine sehr gute Anleitung zur Verwendung finden Sie hier:
http://mandubian.com/2012/09/08/unveiling-play-2-dot-1-json-api-part1-jspath-reads-combinators/
http://mandubian.com/2012/10/01/unveiling-play-2-dot-1-json-api-part2-writes-format-combinators/
http://mandubian.com/2012/10/29/unveiling-play-2-dot-1-json-api-part3-json-transformers/
quelle
Lassen Sie mich Ihnen auch die SON of JSON- Version geben:
quelle
Play hat sein Modul für den Umgang mit JSON unabhängig von Play Framework, Play WS, veröffentlicht
Habe einen Blog-Beitrag darüber verfasst und ihn unter http://pedrorijo.com/blog/scala-json/ gelesen.
Wenn Sie Fallklassen und Play WS (bereits in Play Framework enthalten) verwenden, konvertieren Sie zwischen json- und Fallklassen mit einem einfachen impliziten Einzeiler
quelle