A Scala library for producing JSON output based on JSON API specification.
The library supports read and write for both Play-JSON and Spray-JSON.
Library is very much Work-In-Progress and expect API to change.
Currently library supports Scala version 2.11
and 2.10
.
In order to use current version scala-jsonapi you have to add library dependency assuming that you have sonatype resolvers set up.
libraryDependencies += "org.zalando" %% "scala-jsonapi" % "0.3.4"
The rich JSON API model is available by following import:
import org.zalando.jsonapi.model._
The library provides serialization and deserialization of Jsonapi root objects to JSON using either Spray-JSON or Play-JSON. Please note that you need to explicitly add a dependency to either spray-json or play-json to your project.
import org.zalando.jsonapi.json.sprayjson.SprayJsonJsonapiProtocol._
import spray.json._
// Serialization
val rootObject: RootObject = ???
rootObject.toJson
// Deserialization
val json: JsValue = ???
json.convertTo[RootObject]
import org.zalando.jsonapi.json.playjson.PlayJsonJsonapiProtocol._
import play.api.libs.json._
// Serialization
val rootObject: RootObject = ???
Json.toJson(rootObject)
// Deserialization
val json: JsValue = ???
Json.fromJson[RootObject](json)
The library provides type class JsonapiRootEntityWriter
in order to enable you to create JSON API representation for your resources.
Following code snippet demonstrate the usage of that:
import org.zalando.jsonapi
import jsonapi.Jsonapi
case class Person(name: String)
implicit val personJsonapiWriter = new JsonapiRootObjectWriter[Person] {
override def toJsonapi(person: Person) = {
???
}
}
val personRootObject: RootObject = Jsonapi.asJsonapi(Person("Boris M."))
For complete usage see the specs example.
Publishing and releasing is made with help of sbt-sonatype plugin