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
それで全部です。
前の答えに加えて、代わりに定義することができます:
def deserialize(implicit format:Formats):PartialFunction [(TypeInfo、JValue)、Map [Any、Any]] = {Map()}
これにより、他の作業マップの逆シリアル化が中断されることはありません。