2012-11-13 8 views
7

ile kullanıcı tanımlı vaka sınıflarına JSON serileştirme Bu mükemmel tutorial'u Jerkson kullanarak Scala'da JSON üzerinde işlemeye başladım. Özellikle, JSON'u kullanıcı tanımlı vaka sınıflarına serpmekle ilgileniyorum. makale bunu çalıştıran bu hata var basit bir örnekJerkson

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

vardır, ben Oynat 2.0.1, Scala 2.9.1-1, Jerkson 0.5.0 üzerinde duyuyorum.

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

Ayrıca, Google Gruplarında this bulundu, ancak yardımcı olmadı.

Herhangi bir fikrin var mı?

+1

bir şey değiştirir mi (onlar' vaka sınıfları için gerekli değildir)? – romanb

+0

@romanb Sadly, no. – Bob

+0

Elbette bunu REPL'de denemiyorsunuz? –

cevap

5

Maalesef Jerkson'u bilmiyorum, ancak Spray-Json bu tür işleri kolaylaştırıyor. Aşağıdaki örnek Spray-Json readme şöyledir:

İşte
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 den biraz farklı bir örnek: Eğer durum sınıf alanlardan gereksiz "val" bildirimleri kaldırırsanız

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

Güzel, gelecekteki uygulamalar için buna bakacağım ama maalesef Jerkson'u kullanmam gerek. – Bob

+0

Cool, Jerkson ile size yardım edemediğimiz için özür dileriz. – Jack