使用spray json序列化Map [String,Any]

Yar*_*lav 17 scala spray-json

如何使用spray-json序列化Map [String,Any]?我试试

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

它说Cannot find JsonWriter or JsonFormat type class for scala.collection.immutable.Map[String,Any].

Gan*_*ead 25

这是我用来执行此任务的隐式转换器:

  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
    }
  }
Run Code Online (Sandbox Code Playgroud)

它是从Spray用户组中的这篇文章改编而来的,但我无法获得并且不需要将嵌套的Sequences和Maps写入Json,所以我把它们拿出来了.

  • 太棒了,它适合我.我只需要确保在其他依赖于它的JsonFormat含义之前声明这个对象 (2认同)

Emm*_*ini 5

另一个选项应该适用于您的情况

data.parseJson.convertTo[Map[String, JsValue]]
Run Code Online (Sandbox Code Playgroud)

  • `data`的类型是`Map [String,Any]` - 我应该导入什么才能使它具有`parseJson`方法? (6认同)
  • @mirelon 可能是一种过时评论的方式 - 但对于其他阅读本文的人:您应该确保`import spray.json._` 和`import DefaultJsonProtocol._` (2认同)