scala - 使用lift-json序列化一个没有字符串作为键的 map

标签 scala serialization map lift-json

似乎lift-json 仅限于以字符串作为键的映射。

绕过此限制的最佳方法是什么?

最佳答案

定义您自己的 Serializer[Map[Any, Any]] .

import net.liftweb.json._
import ext._

object MapSerializer extends Serializer[Map[Any, Any]] {
  def serialize(implicit format: Formats): PartialFunction[Any, JValue] = {
    case m: Map[_, _] => JObject(m.map({
      case (k, v) => JField(
        k match {
          case ks: String => ks
          case ks: Symbol => ks.name
          case ks: Any => ks.toString
        },
        Extraction.decompose(v)
      )
    }).toList)
  }

  def deserialize(implicit format: Formats): PartialFunction[(TypeInfo, JValue), Map[Any, Any]] = {
    sys.error("Not interested.")
  }
}

然后将其添加到隐式Formats多变的。
implicit val formats = DefaultFormats + MapSerializer

就这样。

关于scala - 使用lift-json序列化一个没有字符串作为键的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11387612/

相关文章:

ios - 缩小和放大后 MapOverlay 闪烁-iOS

scala - 不可变对象(immutable对象)的缺点

c# - 如何在 JsonConverter 的 Json.net 中设置只读属性值

c++ - 计算Qt中对象的序列化大小

c# - 将 JSON 反序列化为抽象类

c++ - 双向 map 是否有更有效的实现?

map - golang map 打印乱序

java - Scala SBT 失败 - 加载 CharSequence 时出错(Scala 2.12.1,SBT 0.13.13)

scala - 是否可以从 Tree 和 MethodSymbol 生成 Apply?

scala - 如何删除密封特征实现中的重复 case 语句