Skip to content

Instantly share code, notes, and snippets.

@gakuzzzz
Created November 3, 2011 06:18
Show Gist options
  • Save gakuzzzz/1335898 to your computer and use it in GitHub Desktop.
Save gakuzzzz/1335898 to your computer and use it in GitHub Desktop.

やりたいこと

カジュアルかつ型安全に Scalaオブジェクト <--> JSON文字列 の変換したい。

JSON化:

scala> import jp.t2v.util.json._
import jp.t2v.util.json._

scala> List(10, 20, 30).toJson
res0: String = [10, 20, 30]

scala> List(List("aa", "bb"), List(), List("dd", "ee", "ff")).toJson
res1: String = [["aa", "bb"], [], ["dd", "ee", "ff"]]

scala> case class User(id: Int, name: String)
defined class User

scala> case class Message(user: User, body: String, lang: String)
defined class Message

scala> List(
     |   Message(User(1, "Tom"),  "Hello", "en"), 
     |   Message(User(2, "John"), "World", "en"), 
     |   Message(User(3, "Bob"),  "Scala", "en")
     |).toJson
res2: String = [{"user": {"id": 1, "name": "Tom"},  "body": "Hello", "lang": "en"}, 
                {"user": {"id": 2, "name": "John"}, "body": "World", "lang": "en"}, 
                {"user": {"id": 3, "name": "Bob"},  "body": "Scala", "lang": "en"}]

parse:

scala> val source = """[["aa", "bb"], [], ["dd", "ee", "ff"]]"""
res0: String = [["aa", "bb"], [], ["dd", "ee", "ff"]]

scala> parseJson[List[List[[String]]](source)
res1: Either[ParseFailure, List[List[java.lang.String]]] = 
        Right(List(List(aa, bb), List(), List(dd, ee, ff)))

scala> parseJson[Seq[Array[[String]]](source)
res2: Either[ParseFailure, Seq[Array[java.lang.String]]] =
        Right(Seq(Array(aa, bb), Array(), Array(dd, ee, ff)))

scala> parseJson[List[List[[Int]]](source)
res1: Either[ParseFailure, List[List[Int]]] = 
        Left(ParseFailure(could not parse "aa" to Int, ...))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment