7

Jerkson を使用して Scala で JSON を処理するこの優れたチュートリアルに出会いました。特に、JSON をユーザー定義のケース クラスにデシリアライズすることに興味があります。記事には簡単な例があります

case class Simple(val foo: String, val bar: List[String], val baz: Map[String,Int])

object SimpleExample {
  def main(args: Array[String]) {
    import com.codahale.jerkson.Json._
    val simpleJson = """{"foo":42, "bar":["a","b","c"], "baz":{"x":1,"y":2}}"""
    val simpleObject = parse[Simple](simpleJson)
    println(simpleObject)
  }
}

Play 2.0.1、Scala 2.9.1-1、Jerkson 0.5.0 を使用しています。

Execution exception [[ParsingException: Unable to find a case accessor

これも Google グループで見つけましたが、役に立ちません。

何か案は?

4

1 に答える 1

6

残念ながら Jerkson については知りませんが、Spray-Json はこの種の作業を簡単にします。以下の例は、Spray-Json の readmeからのものです。

 case class Color(name: String, red: Int, green: Int, blue: Int)

object MyJsonProtocol extends DefaultJsonProtocol {
  implicit val colorFormat = jsonFormat4(Color)
}

import MyJsonProtocol._

val json = Color("CadetBlue", 95, 158, 160).toJson
val color = json.convertTo[Color]

誰かの git リポジトリとは少し異なる例を次に示します。

package cc.spray.json.example

import cc.spray.json._


object EnumSex extends Enumeration {
  type Sex = Value
  val MALE = Value("MALE")
  val FEMALE = Value("FEMALE")
}

case class Address(no: String, street: String, city: String)

case class Person(name: String, age: Int, sex: EnumSex.Sex, address: Address)

object SprayJsonExamples {
  def main(args: Array[String]) {
    val json = """{ "no": "A1", "street" : "Main Street", "city" : "Colombo" }"""
    val address = JsonParser(json).fromJson[Address]
    println(address)

    val json2 = """{ "name" : "John", "age" : 26, "sex" : 0 , "address" : { "no": "A1", "street" : "Main Street", "city" : "Colombo" }}"""

    val person = JsonParser(json2).fromJson[Person]
    println(person)
  }
}
于 2012-11-14T06:28:51.770 に答える