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

Scala Play Json can't read on hetero-type json array

使用"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

我不明白为什么会失败,正确的做法是什么?


这是错误日志,谁看得懂。

Exception in thread "main" play.api.libs.json.JsResultException: JsResultException(errors:List(((2),List(ValidationError(error.expected.jsstring,WrappedArray()))), ((1),List(ValidationError(error.expected.jsnumber,WrappedArray()))), ((3),List(ValidationError(error.expected.jsnumber,WrappedArray())))))

遗憾的是,Play-Json.

中没有默认值 Tuple reader

列表索引必须从 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)