Saya perlu membuat string JSON, seperti ini:
[
{ 'id': 1, 'name': 'John'},
{ 'id': 2, 'name': 'Dani'}
]
val jArray = JsArray();
jArray += (("id", "1"), ("name", "John"))
jArray += (("id", "2"), ("name", "Dani"))
println(jArray.dump)
Saya harus dapat menambahkan baris ke jArray
, sesuatu sepertijArray += ...
Apa perpustakaan / solusi terdekat untuk ini?
Jawaban:
Sayangnya menulis perpustakaan JSON adalah versi komunitas Scala yang mengkode aplikasi daftar todo.
Ada cukup banyak alternatif. Saya daftar mereka tanpa urutan tertentu, dengan catatan:
💣 = belum memperbaiki kerentanan keamanan, § = memiliki integrasi Scalaz, ± = mendukung interop dengan Jackson
JsonNode
Dalam Snowplow kita menggunakan json4s dengan back-end Jackson; kami memiliki pengalaman yang baik dengan Argonaut juga.
sumber
Lift-json ada di versi 2.6 dan berfungsi dengan sangat baik (dan juga didukung dengan sangat baik, pengelola selalu siap untuk memperbaiki bug yang ditemukan pengguna. Anda dapat menemukan contoh menggunakannya di repositori github
Pemelihara (Joni Freeman) selalu dapat dijangkau di milis Lift . Ada juga pengguna lain di milis yang juga sangat membantu.
Seperti yang ditunjukkan oleh @Alexey, jika Anda ingin menggunakan perpustakaan dengan versi Scala lainnya, katakan
2.11.x
, ubahscalaVersion
dan gunakan%%
sebagai berikut:Anda dapat memeriksa situs liftweb.net untuk mengetahui versi terbaru seiring berjalannya waktu.
sumber
Saya sarankan menggunakan jerkson , ini mendukung sebagian besar konversi tipe dasar:
sumber
Nomor 7 dalam daftar adalah Jackson, tidak menggunakan Jerkson. Ini memiliki dukungan untuk objek Scala, (kelas kasus dll).
Di bawah ini adalah contoh bagaimana saya menggunakannya.
Ini membuatnya sangat sederhana. Selain itu, XmlSerializer dan dukungan untuk JAXB Annotations sangat berguna.
Posting blog ini menjelaskan penggunaannya dengan JAXB Annotations dan Play Framework.
http://krasserm.blogspot.co.uk/2012/02/using-jaxb-for-xml-and-json-apis-in.html
Ini adalah JacksonMapper saya saat ini.
sumber
Mungkin saya sedikit terlambat, tetapi Anda benar-benar harus mencoba menggunakan json library dari play framework. Anda bisa melihat dokumentasi . Dalam rilis 2.1.1 saat ini Anda tidak dapat menggunakannya secara terpisah tanpa seluruh permainan 2, jadi ketergantungannya akan terlihat seperti ini:
Ini akan membawa Anda seluruh kerangka bermain dengan semua hal di papan.
Tapi seperti yang saya tahu orang-orang dari Typesafe punya rencana untuk memisahkannya di rilis 2.2. Jadi, ada play-json mandiri dari 2.2-snapshot.
sumber
Anda harus memeriksa Genson . Ini hanya berfungsi dan jauh lebih mudah digunakan daripada sebagian besar alternatif yang ada di Scala. Cepat, memiliki banyak fitur dan integrasi dengan beberapa lib lainnya (jodatime, json4s DOM api ...).
Semua itu tanpa kode mewah yang tidak perlu seperti implisit, pembaca / penulis khusus untuk kasus dasar, API yang dapat diterima karena kelebihan operator ...
Menggunakannya semudah:
Penafian: Saya penulis Gensons, tapi itu tidak berarti saya tidak objektif :)
sumber
Berikut ini adalah implementasi dasar penulisan dan kemudian membaca
json
file menggunakanjson4s
.sumber
Jawn adalah parser JSON library yang sangat fleksibel di Scala. Ini juga memungkinkan pembuatan AST khusus; Anda hanya perlu menyediakannya dengan sifat kecil untuk memetakan ke AST.
Bekerja sangat baik untuk proyek terbaru yang membutuhkan sedikit penguraian JSON.
sumber
Pengangkatan tampaknya tidak ada dalam daftar jawaban. Itu dapat diperoleh dari http://rapture.io/ dan memungkinkan Anda (antara lain) untuk:
Saya tidak ingin menyalin / menempelkan contoh Rapture dari halaman itu. Presentasi yang bagus tentang fitur-fitur Rapture diberikan oleh Jon Pretty di SBTB 2014: https://www.youtube.com/watch?v=ka5-OLJgybI
sumber
@ AlaxDean # 7 menjawab, Argonaut adalah satu-satunya yang saya dapat bekerja dengan cepat dengan sbt dan intellij. Sebenarnya json4s juga butuh sedikit waktu tetapi berurusan dengan AST mentah bukan yang saya inginkan. Saya mendapat argonaut untuk bekerja dengan memasukkan satu baris ke build.st saya:
libraryDependencies += "io.argonaut" %% "argonaut" % "6.0.1"
Dan kemudian tes sederhana untuk melihat apakah saya bisa mendapatkan JSON:
Lalu
Pastikan Anda terbiasa dengan Opsi yang hanya merupakan nilai yang juga bisa nol (saya kira nol aman). Argonaut menggunakan Scalaz jadi jika Anda melihat sesuatu yang tidak Anda mengerti seperti simbol
\/
(atau operasi) itu mungkin Scalaz.sumber
Anda dapat mencoba ini: https://github.com/momodi/Json4Scala
Ini sederhana, dan hanya memiliki satu file scala dengan kode kurang dari 300 baris.
Ada sampel:
sumber
Saya menggunakan uPickle yang memiliki keuntungan besar karena ia akan menangani kelas kasus bersarang secara otomatis:
Tambahkan ini ke Anda
build.sbt
untuk menggunakan uPickle:sumber
Saya menggunakan PLAY JSON library Anda dapat menemukan repo mavn hanya untuk perpustakaan JSON bukan seluruh kerangka kerja di sini
Tutorial yang sangat bagus tentang cara menggunakannya, tersedia di sini:
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/
sumber
Biarkan saya juga memberi Anda versi SON of JSON :
sumber
Play merilis modulnya untuk berurusan dengan JSON secara independen dari Play Framework, Play WS
Membuat posting blog tentang itu, lihat di http://pedrorijo.com/blog/scala-json/
Menggunakan kelas kasus, dan Play WS (sudah termasuk dalam Play Framework) Anda mengonversi kasus antara json dan kelas kasus dengan implisit satu garis sederhana
sumber