It seems like lift-json is limited to maps that have Strings as keys.
What is the best way to bypass this limitation ?
It seems like lift-json is limited to maps that have Strings as keys.
What is the best way to bypass this limitation ?
Define your own 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.")
}
}
Then add it to the implicit Formats
variable.
implicit val formats = DefaultFormats + MapSerializer
That's all.
In addition to the previous answer you can define instead:
def deserialize(implicit format: Formats): PartialFunction[(TypeInfo, JValue), Map[Any, Any]] = { Map() }
This doesn't break any other working map deserialization.
© 2022 - 2024 — McMap. All rights reserved.