Десериализация JSON в пользовательские классы дел с помощью Jerkson
Я наткнулся на это превосходное руководство по обработке JSON в Scala с использованием Jerkson. В частности, я заинтересован в десериализации JSON в пользовательские классы case. В статье есть простой пример
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, но это не полезно.
Есть идеи?
1 ответ
К сожалению, я не знаю Джексона, но Spray-Json облегчает этот тип вещей. Пример ниже взят из readme Spray-Json:
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)
}
}