2012-11-13 19 views
7

予跨越這個優良tutorial來使用Jerkson Scala中處理JSON。特別是,我有興趣將JSON反序列化爲用戶定義的案例類。這篇文章有一個簡單的例子反序列化JSON成用戶定義的類的情況下與Jerkson

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

我得到這個錯誤運行它,我在玩2.0.1,斯卡拉2.9.1-1,傑克遜0.5.0。

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

也在網上搜索到this但它並沒有幫助。

任何想法?

+1

是否改變任何東西,如果你刪除的情況下類域冗餘「VAL」聲明(他們」沒有必要的案例類)? – romanb

+0

@romanb可悲的是,沒有。 – Bob

+0

當然,你不能在REPL嘗試這種? –

回答

5

不幸的是我不知道Jerkson,但噴霧的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) 
    } 
} 
+0

不錯,我會考慮,對於未來的應用程序,但不幸的是,我需要使用Jerkson。 – Bob

+0

酷,道歉不能夠幫助您與Jerkson。 – Jack

相關問題