Экземпляр play.api.libs. json .Format недоступен для scala .Char в неявной области видимости - PullRequest
0 голосов
/ 05 мая 2020

У меня есть класс case:

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

Я использую: "com.typesafe.play" %% "play-json" % "2.7.2"

и написал следующие форматы:

неявные форматы val = DefaultFormats

implicit val emStatusFormat = Json .format [EmStatus]

, но по-прежнему появляется ошибка:

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

Может ли кто-нибудь помочь мне решить эту проблему .

1 Ответ

3 голосов
/ 05 мая 2020

Вы пытаетесь преобразовать этот формат:

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

в JSON.

Play JSON (с генерацией формата) хотел бы, чтобы он был преобразован в:

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

Точно - как кодировать Char? Это одиночный символ String? Это целое число размером 1 байт? Для этого нет общего соглашения, поэтому Play JSON не предоставил для него код c.

Но вы можете:

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

Как только вы его предоставите , компиляция завершится успешно.

Вы можете:

  • написать его вручную:
    implicit val charFormat: Format[Char] = new Format[Char]{
      /* implement required methods */
    }
    
  • используйте другой код c для его генерации
    import play.api.libs.functional.syntax._
    implicit val charFormat: Format[Char] = implicitly[Format[String]].inmap[Char](_.head, _.toString)
    
...