Распылите формат json для типа Unit

Я пишу метод со следующей подписью:

def foo[A: Marshaller, B: Marshaller](f: A => B) = {...}

Загвоздка в том, что A может быть Unit. Имеет смысл, что должен существовать уже существующий формат json для Unit, который преобразуется в пустую строку и обратно, и также имеет смысл, что реализация такого формата должна быть тривиальной, даже если он не существует. Как я могу определить или импортировать формат json для Unit, как я делаю для классов case, следующим образом:

implicit val myFormat = jsonFormat4(myCaseClassWithFourFields)

person jonderry    schedule 11.06.2014    source источник


Ответы (2)


Насколько мне известно, не существует предопределенного формата json для Unit. Но вы можете написать свой собственный формат json:

import spray.json._
import DefaultJsonProtocol._

implicit object UnitJsonFormat extends JsonFormat[Unit] {
  def write(u: Unit) = JsObject()
  def read(value: JsValue): Unit = value match {
      case JsObject(fields) if fields.isEmpty => Unit
  }
}

Используй это:

scala> println("").toJson

res0: spray.json.JsValue = {}

scala> res0.convertTo[Unit]

scala>

Обновление: я не уверен, как вы ожидаете, что json будет выглядеть для Unit, пожалуйста, уточните.

person Christian    schedule 12.06.2014

Я пришел к этому вопросу и позже узнал, что spray обеспечивает JsonFormats для наиболее важных Scala Types (например, Int, Long, Float, Double, Byte, Short, BigDecimal, BigInt, Unit, Boolean, Char, String и Symbol) в признаке BasicFormats.

Вы можете просто смешать BasicFormats и все заработает.

person mukesh210    schedule 27.07.2020