play.api.libs.json.Format 的实例在隐式范围内对 scala.Char 不可用

No instance of play.api.libs.json.Format is available for scala.Char in the implicit scope

我有一个案例class:

case class Status(cmpId: String, stage: String, status: String, outputPath: String, message: String, delimiter: Char = ',')

我正在使用:"com.typesafe.play" %% "play-json" % "2.7.2"

并编写了以下格式:

implicit val formats = DefaultFormats

implicit val emStatusFormat =Json.format[EmStatus]

但仍然出现错误:

 No instance of play.api.libs.json.Format is available for scala.Char in the implicit scope

谁能帮我解决这个问题。

您尝试转换这种格式:

Status("cmpId value", "stage value", "status value", "outputPath value", "message value", ',')

进入JSON.

播放 JSON(带格式生成)希望将其转换为:

{
  "cmpId": "cmpId value",
  "stage": "stage value",
  "status": "status value",
  "outputPath": "outputPath value",
  "message": "message value",
  "delimiter": ???
}

确切 - Char 应该如何编码?是单个字符String吗?它是 1 字节大小的整数吗?这没有共同的约定,这就是为什么 Play JSON 没有为此提供任何编解码器。

但是你可以:

import play.api.libs.json.Format
implicit val charFormat: Format[Char] = ... // your implementation

提供后编译成功

您可以:

  • 手写:
    implicit val charFormat: Format[Char] = new Format[Char]{
      /* implement required methods */
    }
    
  • 使用另一个编解码器生成它
    import play.api.libs.functional.syntax._
    implicit val charFormat: Format[Char] = implicitly[Format[String]].inmap[Char](_.head, _.toString)