2012-11-13 7 views
7

Ich stieß auf diese hervorragende tutorial auf die Verarbeitung von JSON in Scala mit Jerkson. Insbesondere interessiert mich die Deserialisierung von JSON in benutzerdefinierte Fallklassen. Der Artikel hat ein einfaches BeispielDeserialisieren JSON in benutzerdefinierten Fall Klassen mit 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) 
    } 
} 

ich diesen Fehler habe es läuft, bin ich auf Play 2.0.1 Scala 2.9.1-1, Jerkson 0.5.0.

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

Auch gefunden this auf Google Groups, aber es ist nicht hilfreich.

Irgendwelche Ideen?

+1

Hat es etwas ändern, wenn Sie die redundanten „val“ Erklärungen aus den Fallklassenfelder entfernen (sie‘ nicht notwendig für Fallklassen)? – romanb

+0

@romanb Leider nein. – Bob

+0

Natürlich versuchen Sie das nicht auf der REPL? –

Antwort

5

Leider kenne ich Jerkson nicht, aber Spray-Json macht diese Art von Sachen einfach. Das Beispiel ist unten aus dem 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] 

Hier ist ein etwas anderes Beispiel aus 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

Schön, ich werde das für zukünftige Apps untersuchen, aber leider muss ich Jerkson benutzen. – Bob

+0

Cool, Entschuldigung dafür, dass ich dir mit Jerkson nicht helfen konnte. – Jack