首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala -播放json JsValue conver到泛型类型

scala -播放json JsValue conver到泛型类型
EN

Stack Overflow用户
提问于 2017-06-01 01:07:46
回答 1查看 321关注 0票数 0

我试着从json中提取地图数据。

代码语言:javascript
复制
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],但不是泛型的),这个函数就能工作。我该怎么处理呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-01 02:25:13

在某些时候,您必须有一个特定的KV。此时,您将需要(隐式)作用域中的隐式读取器,在此之前,您只需隐式传递它们:

代码语言:javascript
复制
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]]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44296926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档