Skip to content

Instantly share code, notes, and snippets.

@knutwalker
Created February 17, 2015 16:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save knutwalker/4044b6ae4f58c43018d3 to your computer and use it in GitHub Desktop.
Save knutwalker/4044b6ae4f58c43018d3 to your computer and use it in GitHub Desktop.
Demo json struff with argonaut and spray
package oanda
import argonaut._, Argonaut._, Shapeless._
import spray.json._, DefaultJsonProtocol._
import scala.util.Try
object J {
sealed trait MyMessages
case class Message(code: Int, message: String, moreInfo: String) extends MyMessages
case class Message2(heartbeat: Heartbeat) extends MyMessages
case class Heartbeat(time: String)
val json =
"""
|{
| "code" : 3,
| "message" : "This request requires authorization",
| "moreInfo" : "sdfjbskdjfbjksbvlsdnbvl"
|}
""".stripMargin
val json2 =
"""
|{
| "heartbeat": {
| "time": "alfknsdlfnsldfn"
| }
|}
""".stripMargin
def argonaut(): Unit = {
val messageDecoder = implicitly[DecodeJson[Message]] map { x ⇒ x: MyMessages }
val message2Decoder = implicitly[DecodeJson[Message2]] map { x ⇒ x: MyMessages }
implicit val decoder: DecodeJson[MyMessages] =
messageDecoder ||| message2Decoder
val maybeMessage2 = json2.decodeValidation[MyMessages]
println(s"maybeMessage2 = ${maybeMessage2}")
val maybeMessage1 = json.decodeValidation[MyMessages]
println(s"maybeMessage1 = ${maybeMessage1}")
println(Message(42, "1337", "foobar").asJson.spaces2)
}
def spray(): Unit = {
implicit val format = jsonFormat3(Message)
val maybeMessage = Try(json.parseJson.convertTo[Message])
println(s"maybeMessage = ${maybeMessage}")
println(Message(42, "1337", "foobar").toJson.prettyPrint)
}
def main(args: Array[String]): Unit = {
argonaut()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment