Muszę zbudować ciąg JSON, coś takiego:
[
{ 'id': 1, 'name': 'John'},
{ 'id': 2, 'name': 'Dani'}
]
val jArray = JsArray();
jArray += (("id", "1"), ("name", "John"))
jArray += (("id", "2"), ("name", "Dani"))
println(jArray.dump)
Muszę mieć możliwość dodawania wierszy do jArray
, na przykładjArray += ...
Jaka jest najbliższa biblioteka / rozwiązanie tego problemu?
Odpowiedzi:
Niestety pisanie biblioteki JSON jest wersją kodowania aplikacji z listą zadań do wykonania przez społeczność Scala.
Istnieje wiele alternatyw. Podaję je w przypadkowej kolejności, z uwagami:
💣 = nie ma naprawionych luk w zabezpieczeniach, § = ma integrację ze Scalaz, ± = obsługuje współpracę z Jacksonem
JsonNode
W Snowplow używamy json4s z zapleczem Jacksona; mieliśmy też dobre doświadczenia z Argonautą.
źródło
Lift-json jest w wersji 2.6 i działa bardzo dobrze (a także jest bardzo dobrze obsługiwany, opiekun jest zawsze gotowy do naprawienia wszelkich błędów, które mogą znaleźć użytkownicy. Przykłady użycia go można znaleźć w repozytorium github
Opiekun (Joni Freeman) jest zawsze osiągalny na liście mailingowej Lift . Na liście mailingowej są również inni użytkownicy, którzy również są bardzo pomocni.
Jak wskazuje @Alexey, jeśli chcesz używać biblioteki z inną wersją Scali, powiedz
2.11.x
, zmieńscalaVersion
i użyj%%
w następujący sposób:Możesz sprawdzić witrynę liftweb.net, aby w miarę upływu czasu sprawdzać najnowszą wersję.
źródło
Sugeruję użycie jerksona , obsługuje większość podstawowych konwersji typu:
źródło
Numer 7 na liście to Jackson, który nie używa Jerkson. Obsługuje obiekty Scala (klasy przypadków itp.).
Poniżej znajduje się przykład tego, jak go używam.
To sprawia, że jest to bardzo proste. Ponadto XmlSerializer i obsługa adnotacji JAXB jest bardzo przydatna.
Ten wpis na blogu opisuje jego użycie z adnotacjami JAXB i strukturą Play.
http://krasserm.blogspot.co.uk/2012/02/using-jaxb-for-xml-and-json-apis-in.html
Oto mój obecny JacksonMapper.
źródło
Może trochę się spóźniłem, ale naprawdę powinieneś spróbować użyć biblioteki json z frameworka odtwarzania. Możesz zajrzeć do dokumentacji . W obecnej wersji 2.1.1 nie można było używać go oddzielnie bez całej gry 2, więc zależność będzie wyglądać następująco:
Zapewni Ci całe środowisko gry ze wszystkimi rzeczami na pokładzie.
Ale jak wiem, faceci z Typesafe mają plan, aby oddzielić to w wersji 2.2. Tak więc istnieje samodzielny play-json z wersji 2.2-snapshot.
źródło
Powinieneś sprawdzić Genson . Po prostu działa i jest znacznie łatwiejszy w użyciu niż większość istniejących alternatyw w Scali. Jest szybki, posiada wiele funkcji i integracji z innymi bibliotekami (jodatime, json4s DOM api ...).
Wszystko to bez żadnego wymyślnego niepotrzebnego kodu, takiego jak implicity, niestandardowych czytelników / pisarzy dla podstawowych przypadków, niewidoczne API z powodu przeciążenia operatora ...
Korzystanie z niego jest tak proste, jak:
Zastrzeżenie: jestem autorem Gensonów, ale to nie oznacza, że nie jestem obiektywny :)
źródło
Oto podstawowa implementacja zapisu, a następnie odczytu
json
pliku za pomocąjson4s
.źródło
Jawn to bardzo elastyczna biblioteka parserów JSON w Scali. Umożliwia także generowanie niestandardowych AST; wystarczy dostarczyć mu małą cechę do zmapowania do AST.
Działał świetnie w przypadku niedawnego projektu, który wymagał trochę analizy JSON.
źródło
Wydaje się, że na liście odpowiedzi brakuje Rapture. Można go pobrać ze strony http://rapture.io/ i umożliwia (między innymi):
Nie chcę kopiować / wklejać przykładów Rapture z jego strony. Miłą prezentację na temat funkcji Rapture wygłosił Jon Pretty na SBTB 2014: https://www.youtube.com/watch?v=ka5-OLJgybI
źródło
Odpowiedź @ AlaxDean nr 7, Argonaut jest jedyną, której udało mi się szybko rozpocząć pracę z sbt i intellij. Właściwie json4 również zajęło trochę czasu, ale radzenie sobie z surowym AST nie jest tym, czego chciałem. Dostałem argonautę do pracy, umieszczając jedną linię w moim build.st:
libraryDependencies += "io.argonaut" %% "argonaut" % "6.0.1"
A potem prosty test, aby sprawdzić, czy uda mi się uzyskać JSON:
I wtedy
Upewnij się, że znasz opcję Option, która jest po prostu wartością, która może być również zerowa (chyba zerowa bezpieczna). Argonaut używa Scalaz, więc jeśli zobaczysz coś, czego nie rozumiesz, jak symbol
\/
(operację), prawdopodobnie jest to Scalaz.źródło
Możesz spróbować tego: https://github.com/momodi/Json4Scala
Jest prosty i ma tylko jeden plik scala z mniej niż 300 wierszami kodu.
Istnieją próbki:
źródło
Używam uPickle, który ma tę dużą zaletę, że automatycznie obsługuje zagnieżdżone klasy przypadków:
Dodaj to do swojego,
build.sbt
aby używać uPickle:źródło
Używam biblioteki PLAY JSON, możesz znaleźć repozytorium mavn tylko dla biblioteki JSON, a nie całego frameworka tutaj
Bardzo dobre samouczki dotyczące ich używania są dostępne tutaj:
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/
źródło
Pozwólcie, że podam również wersję SON of JSON :
źródło
Play wydał swój moduł do obsługi JSON niezależnie od Play Framework, Play WS
Opublikowałem na ten temat post na blogu, sprawdź to na http://pedrorijo.com/blog/scala-json/
Używając klas przypadków i Play WS (już zawartych w Play Framework), konwertujesz przypadki między klasami json i case z prostą niejawną jednowierszową
źródło