【问题标题】:Deserializing JSON into user-defined case classes with Jerkson使用 Jerkson 将 JSON 反序列化为用户定义的案例类
【发布时间】:2012-11-13 17:01:03
【问题描述】:

我在使用 Jerkson 在 Scala 中处理 JSON 时遇到了这个出色的 tutorial。特别是,我对将 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 网上论坛上找到了 this,但没有帮助。

有什么想法吗?

【问题讨论】:

  • 如果您从案例类字段中删除多余的“val”声明(案例类不需要它们),它会改变什么吗?
  • 你当然不会在 REPL 上尝试这个?
  • @pagoda_5b 不,它在 Play 应用程序中,所以语法与上面有点不同,因为我不需要 main

标签: json scala playframework jerkson


【解决方案1】:

很遗憾,我不认识 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]

这是一个与someone's git repository略有不同的示例:

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)
  }
}

【讨论】:

  • 很好,我会为以后的应用研究它,但不幸的是,我需要使用 Jerkson。
  • 酷,很抱歉无法帮助您解决 Jerkson。
猜你喜欢
  • 2013-10-12
  • 2020-10-08
  • 2011-06-29
  • 2023-02-22
  • 2016-01-15
  • 2018-02-08
  • 2013-08-04
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多