繁体   English   中英

scala-播放json JsValue转换为通用类型

[英]scala - play json JsValue conver to generic type

我试图从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解串器。 尝试为此类型实现隐式的Reads或Format。 方法的参数不足,例如:(隐式fjs:play.api.libs.json.Reads [Map [K,V]])Map [K,V]。 未指定的值参数fjs。

当我为Map定义特定类型(例如v.as [Map [String,Int]],但不是泛型时,此函数有效。我该如何处理?

在某些时候,您将必须具有特定的KV 届时,您将需要(隐式)范围内的隐式读取器,直到那时,您都可以隐式地传递它们:

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]]如果Option也可以。 或者,也可以(js \\ key).validate[Map[K,V]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM