Сериализовать карту [String, Any] с помощью распылителя json

Как сериализовать карту [String, Any] с помощью распылителя? Я пытаюсь

val data = Map("name" -> "John", "age" -> 42)
import spray.json._
import DefaultJsonProtocol._
data.toJson

В нем говорится Cannot find JsonWriter or JsonFormat type class for scala.collection.immutable.Map[String,Any].

Ответ 1

Здесь неявный конвертер, который я использовал для выполнения этой задачи:

  implicit object AnyJsonFormat extends JsonFormat[Any] {
    def write(x: Any) = x match {
      case n: Int => JsNumber(n)
      case s: String => JsString(s)
      case b: Boolean if b == true => JsTrue
      case b: Boolean if b == false => JsFalse
    }
    def read(value: JsValue) = value match {
      case JsNumber(n) => n.intValue()
      case JsString(s) => s
      case JsTrue => true
      case JsFalse => false
    }
  }

Он был адаптирован из этого сообщения в группе пользователей Spray, но я не смог получить и не нуждался в написании вложенных последовательностей и карт в Json, чтобы я вынул их.

Ответ 2

Другой вариант, который должен работать в вашем случае, -

data.parseJson.convertTo[Map[String, JsValue]]