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