2017-05-28 41 views
0

當我反序列化有以下簡單的代碼usign json4s斯卡拉反序列化JSON與json4s問題

package main.scala 

import org.json4s._ 
import org.json4s.jackson.JsonMethods._ 

    object Main { 

    case class Person(name: String, age: Int) 

    def main(args: Array[String]): Unit = { 
     val jsValue = parse("""{"name":"john", "age": 28}""") 
     implicit val formats = DefaultFormats 
     val p = jsValue.extract[Person] 
    } 
    } 

是給下面的錯誤JSON。

異常在線程 「主」 org.json4s.package $ MappingException: scala.Predef $ .refArrayOps([Ljava /郎/對象;)Lscala /收集/可變/ ArrayOps; 不支持在函數體中定義的個案類。

有誰知道它爲什麼會發生?

+2

看來,答案是錯誤:但是你可以通過移動case class定義你的main外界取得了這項工作。你應該在你的'Main'對象之外定義你的case類。 –

+0

不幸的是,當我在外部對象中這樣做時,它也會發生: 對象Main { case class Person(name:String,age:Int) } – flavio

+0

您不需要在對象中定義它。一個case類可以被定義爲一個包中的頂層。 –

回答

1

正如它在評論中出現的那樣,這個限制已經被更新的版本所超越。

package main.scala 

import org.json4s._ 
import org.json4s.jackson.JsonMethods._ 

// here! 
case class Person(name: String, age: Int) 

object Main { 

    def main(args: Array[String]): Unit = { 
    val jsValue = parse("""{"name":"john", "age": 28}""") 
    implicit val formats = DefaultFormats 
    val p = jsValue.extract[Person] 
    } 

} 
+1

這個問題似乎純粹與json4s - scala - jdk版本有關,我自己試圖做這個改變,但沒有成功。無論如何,通常你的建議似乎是正確的解決方案:) – flavio

+0

好的,對不起,我注意到,在你寫的評論中,它仍然在'Main'對象內。無論如何,很高興知道。 – stefanobaghino