ScalaJack is a very fast, seamless JSON serialization engine designed to require the minimum amount of help possible when serializing a class.
Advanced Features:
- Handles tuples
- 'Any' support
- Handles default values for case class fields
- Rich configuration of trait type hint/value
- Supports value classes
- Pluggable reader/render (for non-JSON encodings--CSV, MongoDB, and DynamoDB)
ScalaJack is extremely simple to use.
Include it in your projects by adding the following to your build.sbt:
libraryDependencies ++= Seq("co.blocke" %% "scalajack" % "5.0.3")
If you want to use the optional MongoDB serialization support include this as well:
libraryDependencies ++= Seq("co.blocke" %% "scalajack_mongo" % "5.0.3")
DynamoDB helpers are available here:
libraryDependencies ++= Seq("co.blocke" %% "scalajack_dynamo" % "5.0.3")
ScalaJack is hosted on Bintray/JCenter now so if you're using sbt v0.13.9+ you should find it with no issues.
If you're on sbt v0.13.11 you may need to enable the bintray resolver in your build.sbt with
useJCenter := true
Now you're good to go! Let's use ScalaJack in your project to serialize/de-serialize a case class object into JSON:
import co.blocke.scalajack._
val sj = ScalaJack()
val js = sj.render( myCaseObj ) // serialization
val myObj = sj.read[MyCaseClass](js) // deserialization
Couldn't be simpler!
- Case Classes and Traits
- Non-Case Classes and Java Class Support
- Any Support
- Value Class Support
- Parameterized Classes
- Trait Type Hint Customization
- Custom Type Adapters (custom read/render)
- Try and Capture
- ParseOrElse
- Null and None treatment
- Non-Canonical JSON
- Externalized Type Hints
Non-JSON Formats:
Benchmark | Score | Error | Units |
---|---|---|---|
Hand-written | 28683.250 | ± 3505.351 | ops/s |
ScalaJack 5.0 | 20632.580 | ± 306.105 | ops/s |
Spray | 10314.990 | ± 120.898 | ops/s |
LiftJson | 9313.326 | ± 212.206 | ops/s |
ScalaJack 4.8.3 | 6525.699 | ± 36.103 | ops/s |
Json4s | 5840.046 | ± 201.42 | ops/s |
The entire ScalaJack engine and test suite was redesigned for 5.0. This new design streamlines processing tremendously while maintaining both flexibility and simplicity. In addition to reaching new levels of performance, a major design goal was to allow a flexible way to implement new serialization targets beyond JSON.
This project welcomes our newest team member and core committer, Adam Paynter! The design for ScalaJack 5's new engine was made possible by his thought leadership and sense of adventure.
We hope you'll enjoy using the latest ScalaJack!
Blöcke