我试着从json中提取地图数据。
def getMap[K, V](js: JsValue, key: String): Map[K, V] = {
js \ key match {
case JsDefined(v) => v.as[Map[K, V]] // error here
case _: JsUndefined => throw new Exception("Error")
}
}没有为类型MapK找到Json反序列化器。请尝试为该类型实现隐式读取或格式。方法的参数不足,如:(隐式fjs: play.api.libs.json.Reads[MapK,V])MapK,V.未指定的值参数fjs。
当我为Map定义特定类型时(例如: v.as[ MapString,Int],但不是泛型的),这个函数就能工作。我该怎么处理呢?
发布于 2017-06-01 02:25:13
在某些时候,您必须有一个特定的K和V。此时,您将需要(隐式)作用域中的隐式读取器,在此之前,您只需隐式传递它们:
def getMap[K, V](js: JsValue, key: String)(implicit reads: Reads[Map[K,V]]): Map[K, V] = {
js \ key match {
case JsDefined(v) => v.as[Map[K, V]] // error here
case _: JsUndefined => throw new Exception("Error")
}
}我不知道你为什么要这样设置它。为什么不做任何一个
如果您希望(js \ key).as[Map[K,V]]抛出错误,则使用(js \ key).asOpt[Map[K,V]] (如果选项也可以)。或者,也可能是(js \ key).validate[Map[K,V]]
https://stackoverflow.com/questions/44296926
复制相似问题