【发布时间】:2014-08-18 22:44:31
【问题描述】:
我需要处理这个问题没有回答的案例:Convert any Scala object to JSON
基本上,我不知道如何处理 List 和 Map 类型。我尝试了以下不起作用:
implicit val anyValWriter = Writes[Any] (a =>
a match {
case v: Double => Json.toJson(v)
case v: Float => Json.toJson(v)
case v: Long => Json.toJson(v)
case v: Int => Json.toJson(v)
case v: String => Json.toJson(v)
case v: Iterable[Any] => Json.toJson(v.map(t => Json.toJson(t)).toList)
case v: Map[String, Any] => JsObject(v.map { case (k, v) => (k, Json.toJson(v)) }.toList)
// or, if you don't care about the value
case _ => throw new RuntimeException("Type not serializable.")
})
产生的错误是:No Json serializer found for type Any. Try to implement an implicit Writes or Format for this type.
尝试将anyValWriter 添加到Json.toJson 会导致:recursive value anyValWriter needs type
有什么想法吗?
【问题讨论】:
-
邪恶在我的
Any中。 JSON API 将无法找出如何根据其类型正确编码 Scala 值,因为具体没有类型 (Any)。 -
但是为什么我们没有一个具体的类型而不是 Any 呢?
-
请不要这样做。这与 Play JSON 处理编码和解码的方式完全不一致。
-
对我来说,问题比那里“更高”。应用程序不应处于必须编码
Any值的情况。要编码的值应该是已知类型,然后JSONWrites可以正确解析。 -
我必须处理一个返回 Map[String, Any] 的底层 API。我真的被这种邪恶的类型困住了(Scala 编译器已经警告过我)
标签: json scala playframework-2.0