播放的Json读取和字符串
问题描述:
我有以下的JSON读者播放2.3:播放的Json读取和字符串
import play.api.libs.json._
import play.api.libs.json.Reads._
val airportSearchReads: Reads[String] = (JsPath \ "search").read[String](minLength(3))
,如果我使用一个implicit val
我得到
ambiguous implicit values:
both value uuidReads in trait DefaultReads of type => play.api.libs.json.Reads[java.util.UUID]
and value airportSearchReads in object AirportSearch of type => play.api.libs.json.Reads[String]
match expected type play.api.libs.json.Reads[M]
编译器给我的错误
diverging implicit expansion for type play.api.libs.json.Reads[M]
starting with method ArrayReads in trait DefaultReads
我该如何运作?
答
我得到一个不同的错误,但对我来说工作正常,如果我添加显式类型参数minLength
:
scala> val airportSearchReads: Reads[String] = (JsPath \ "search").read[String](minLength[String](3))
airportSearchReads: play.api.libs.json.Reads[String] = [email protected]
我觉得跟留下到编译器的问题是,有不同的组合的隐含参数列表minLength
。
答
DefaultReads
提供你需要的转化JSON值常见的类型(String
,Option
,Array
等)的读者。因此,为String
提供新读取器是没有必要的。
因此,对于访问json对象中的字段,您不需要定义读者,除非您想将该字段读入您的任意类型。
在这种情况下,您只需要在Reads
和Constraints
中定义的约束。因此,假设你的JSON对象是jsValue
下面的代码给你想要的东西:
// val jsValue = ...
(jsValue \ "search").as[String](Reads.minLength(3))
这给了我同样的错误不幸 – elmalto 2014-11-03 17:09:27
有你删除您的默许阅读器? (刚刚删除'val airportSearchReads:读取[String] =(JsPath \“search”)。读取[String](minLength(3)'first)。 – 2014-11-04 15:03:03
仍然是同样的问题...解决方案顶部作品虽然,所以我会使用它。非常感谢你的帮助 – elmalto 2014-11-04 19:22:54