Scala函数类型标签:T在函数中使用类型T

Scala函数类型标签:T在函数中使用类型T,scala,Scala,我需要解析几个json字段,我正在使用Play json来解析这些字段。由于解析可能失败,我需要为每个字段抛出一个自定义异常 要读取字段,我使用以下命令: val fieldData=parseField[String](json\fieldName,“fieldName”) 我的parseField函数: def parseField[T](result: JsLookupResult, fieldName: String): T = { result.asOpt[T].getOrEl

我需要解析几个json字段,我正在使用Play json来解析这些字段。由于解析可能失败,我需要为每个字段抛出一个自定义异常

要读取字段,我使用以下命令:

val fieldData=parseField[String](json\fieldName,“fieldName”)

我的parseField函数:

def parseField[T](result: JsLookupResult, fieldName: String): T = {
    result.asOpt[T].getOrElse(throw new IllegalArgumentException(s"""Can't access $fieldName."""))
}
但是,我得到一个错误,如下所示:

错误:(17,17)找不到类型T的Json反序列化程序。请尝试实现 此类型的隐式读取或格式。 result.asOpt[T].getOrElse(抛出新的IllegalArgumentException(s“”“无法访问$fieldName。”))


有没有办法告诉
asOpt[]
使用
T
中的类型?

我强烈建议您不要抛出异常。Play JSON API有
JsSuccess
JsError
两种类型,它们将帮助您编码解析错误

根据文件

为了将Scala对象转换为JSON,我们分别使用
JSON.toJson[T:Writes]
JSON.fromJson[T:Reads]
。Play JSON提供读写类型类来定义如何读写特定类型。您可以通过使用Play的自动JSON宏或手动定义它们来获得它们。您还可以使用
validate
as
asOpt
方法从
JsValue
读取JSON。通常,最好使用validate,因为它返回一个
JsResult
,如果JSON格式不正确,该结果可能包含错误


还有关于API在实践中如何表现的问题。

我强烈建议您不要抛出异常。Play JSON API有
JsSuccess
JsError
两种类型,它们将帮助您编码解析错误

根据文件

为了将Scala对象转换为JSON,我们分别使用
JSON.toJson[T:Writes]
JSON.fromJson[T:Reads]
。Play JSON提供读写类型类来定义如何读写特定类型。您可以通过使用Play的自动JSON宏或手动定义它们来获得它们。您还可以使用
validate
as
asOpt
方法从
JsValue
读取JSON。通常,最好使用validate,因为它返回一个
JsResult
,如果JSON格式不正确,该结果可能包含错误


还有关于API在实践中如何体现的内容。

太棒了,谢谢!我使用
validate
使用了这个选项。这带来了另一个问题,但我认为这是另一篇文章。谢谢,太棒了,谢谢!我使用
validate
使用了这个选项。这带来了另一个问题,但我认为这是另一篇文章。谢谢