Argonaut - 在自定义解码器

时间:2015-12-15 23:27:15

标签: json scala error-handling argonaut

我正在尝试实现一个将JSON字符串转换为枚举QuestionType实例的Argonaut JSON解码器实例。问题是如果字符串不是有效的,则返回的DecodeResult应该是一个错误,我不知道该怎么做。

我的代码目前看起来像这样:

implicit def QuestionTypeDecodeJson: DecodeJson[QuestionType] = {
    DecodeJson(c => for {
      typeName <- c.as[String]
      questionType = QuestionType.fromString(typeName).get
    } yield questionType)
  }

QuestionType.fromString(typeName)会返回Option。理想情况下,我不想使用get,而是将Option转换为DecodeResult,包含选项的内容,如果是None,则转换为错误状态DecodeResult 1}}。

我可以使用CursorHistory的构造函数,但说实话,我的签名对我来说非常混乱(我是scala的新手)。它似乎需要一个'cities': data['results']对象,而且我不确定我应该在那里传递什么。

1 个答案:

答案 0 :(得分:2)

DecodeResult对象有一个&#39; ok&#39;并且“失败”#39;方法

implicit def QuestionTypeDecodeJson: DecodeJson[QuestionType] = {
    DecodeJson(c => for {
      typeName <- c.as[String]
      questionType = DecodeResult.ok(QuestionType.fromString(typeName))
    } yield questionType)
}