我试图从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")
}
}
找不到类型为Map [K,V]的Json反序列化器。尝试实现一个 此类型的隐式读取或格式。没有足够的论据 方法为:(隐式fjs:play.api.libs.json.Reads [Map [K,V]])Map [K,V]。 未指定的值参数fjs。
当我为Map定义特定类型时,此函数有效(例如:[Map [String,Int]],但不是泛型。我应该怎么做?
答案 0 :(得分:1)
在某些时候,您必须拥有特定的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]]