Scala Play Json无法读取异类型json数组

时间:2015-04-19 12:39:17

标签: json scala playframework parser-combinators

使用"com.typesafe.play" %% "play-json" % "2.4.0-M3"

val json=Json.parse("""[1,"second",3]""")

case class C123(arg1: Int, arg2: String, arg3: Int)
implicit val c123Reads: Reads[C123] = (
          JsPath(1).read[Int] and 
          JsPath(2).read[String] and 
          JsPath(3).read[Int]
          )(C123)

println(json.as[C123]) //fail

我无法弄清楚为什么会失败,这样做的正确方法是什么?


这是错误日志,适用于任何有能力理解的人。

  

线程“main”中的异常play.api.libs.json.JsResultException:   JsResultException(错误:清单(((2),表(ValidationError(error.expected.jsstring,WrappedArray())))   ((1),表(ValidationError(error.expected.jsnumber,WrappedArray()))),   ((3),表(ValidationError(error.expected.jsnumber,WrappedArray())))))

可悲的是,Play-Json中没有默认的Tuple读者。

1 个答案:

答案 0 :(得分:1)

列表索引必须从0开始,而不是从1开始。

implicit val c123Reads: Reads[C123] = (
          JsPath(0).read[Int] and 
          JsPath(1).read[String] and 
          JsPath(2).read[Int]
          )(C123)

scala> println(json.as[C123])
C123(1,second,3)