Scala函数类型标签:T在函数中使用类型T
我需要解析几个json字段,我正在使用Play json来解析这些字段。由于解析可能失败,我需要为每个字段抛出一个自定义异常 要读取字段,我使用以下命令: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
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
使用了这个选项。这带来了另一个问题,但我认为这是另一篇文章。谢谢