从Json响应-Scala-Play解析数字或字符串值
我知道这不应该发生,但第三方API正在返回JSON响应,其字段与Double/Float或字符串完全相同。在关于“我们为什么生活在这样一个世界”的许多内部辩论之后,我正在努力寻找一种方法来解析这样一种回应:从Json响应-Scala-Play解析数字或字符串值,json,scala,playframework,Json,Scala,Playframework,我知道这不应该发生,但第三方API正在返回JSON响应,其字段与Double/Float或字符串完全相同。在关于“我们为什么生活在这样一个世界”的许多内部辩论之后,我正在努力寻找一种方法来解析这样一种回应: implicit val inconsistentReads: Reads[InconsistentItem] = ( (JsPath \ "field").readNullable[String] ... )(InconsistentItem.apply _) 当这个函数运行时,我
implicit val inconsistentReads: Reads[InconsistentItem] = (
(JsPath \ "field").readNullable[String] ...
)(InconsistentItem.apply _)
当这个函数运行时,我会得到“play.api.libs.json.JsResultException:JsResultException”,而这个字段有时会作为数值返回
无论Json响应中是数字还是字符串,都可以将其作为字符串读入吗
这是针对Scala in-Play框架的。非常感谢 试试这样的东西。因为您没有定义什么是
不一致项
,所以我使用或者
val inconsistentReads = Reads[Either[String, BigDecimal]] {
case JsNumber(a) => JsSuccess(Right(a))
case JsString(a) => JsSuccess(Left(a))
case _ => JsError("Type not supported")
}
示例:
Json.parse("\"hi\"").validate[Either[String, BigDecimal]](inconsistentReads)
# JsSuccess(Left("hi"))
Json.parse("1").validate[Either[String, BigDecimal]](inconsistentReads)
# JsSuccess(Right(1))
试试这样的。因为您没有定义什么是不一致项
,所以我使用或者
val inconsistentReads = Reads[Either[String, BigDecimal]] {
case JsNumber(a) => JsSuccess(Right(a))
case JsString(a) => JsSuccess(Left(a))
case _ => JsError("Type not supported")
}
示例:
Json.parse("\"hi\"").validate[Either[String, BigDecimal]](inconsistentReads)
# JsSuccess(Left("hi"))
Json.parse("1").validate[Either[String, BigDecimal]](inconsistentReads)
# JsSuccess(Right(1))
更通用的Reads[任一]定义:更通用的Reads[任一]定义: