Created
February 17, 2015 16:47
-
-
Save knutwalker/4044b6ae4f58c43018d3 to your computer and use it in GitHub Desktop.
Demo json struff with argonaut and spray
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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