I need to build a JSON string, something like this:
[
{ 'id': 1, 'name': 'John'},
{ 'id': 2, 'name': 'Dani'}
]
val jArray = JsArray();
jArray += (("id", "1"), ("name", "John"))
jArray += (("id", "2"), ("name", "Dani"))
println(jArray.dump)
I need to be able to add rows to the jArray, something like jArray += ...
What is the closest library/solution to this?
解决方案
Unfortunately writing a JSON library is the Scala community's version of coding a todo list app.
There are quite a variety of alternatives. I list them in no particular order, with notes:
parsing.json.JSON - Warning this library is available only up to Scala version 2.9.x (removed in newer versions)
spray-json - Extracted from the Spray project
Jerkson ± - Warning a nice library (built on top of Java Jackson) but now abandonware. If you are going to use this, probably follow the Scalding project's example and use the backchat.io fork
sjson - By Debasish Ghosh
lift-json - Can be used separately from the Lift project
json4s § ± - An extraction from lift-json, which is attempting to create a standard JSON AST which other JSON libraries can use. Includes a Jackson-backed implementation
Argonaut § - A FP-oriented JSON library for Scala, from the people behind Scalaz
play-json ± - Now available standalone, see this answer for details
dijon - Warning abandoned. A dynamically typed Scala JSON library
sonofjson - JSON library aiming for a super-simple API
Jawn - JSON library by Erik Osheim aiming for Jackson-or-faster speed
Rapture JSON ± - a JSON front-end which can use 2, 4, 5, 6, 7, 11 or Jackson as back-ends
circe - fork of Argonaut built on top of cats instead of scalaz
jsoniter-scala - Scala macros for compile-time generation of ultra-fast JSON codecs
§ = has Scalaz integration, ± = supports interop with Jackson JsonNode
In Snowplow we use json4s with the Jackson back-end; we've had good experiences with Argonaut too.