似乎lift-json仅限于以字符串为键的地图。
绕过此限制的最佳方法是什么?
答案 0 :(得分:5)
定义您自己的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
这就是全部。
答案 1 :(得分:0)
除了上一个答案,你可以改为定义:
def deserialize(隐式格式:格式):PartialFunction [(TypeInfo,JValue),Map [Any,Any]] = { 地图() }
这并没有打破任何其他工作地图反序列化。