这似乎是提升JSON是仅限于具有字符串作为键映射。
什么是绕过这个限制的最佳方式?
这似乎是提升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
就这样。
除了前面的回答,您可以定义改为:
DEF反序列化(隐式格式:格式):PartialFunction [(所属类别,JValue),地图[任意,不限]] = {地图()}
这不会破坏任何其他工作地图反序列化。