ile anahtar olarak bir dize olmayan bir haritayı seri hale getirin Lift-json, anahtar olarak Strings bulunan haritalarla sınırlı gibi görünüyor.Lift-json
Bu sınırlamayı atlamanın en iyi yolu nedir?
ile anahtar olarak bir dize olmayan bir haritayı seri hale getirin Lift-json, anahtar olarak Strings bulunan haritalarla sınırlı gibi görünüyor.Lift-json
Bu sınırlamayı atlamanın en iyi yolu nedir?
Kendi Serializer[Map[Any, Any]]
'inizi tanımlayın.
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.")
}
}
Sonra örtük
Formats
değişken ekleyin.
implicit val formats = DefaultFormats + MapSerializer
Hepsi bu kadar.
önceki yanıt ek olarak yerine tanımlayabiliriz:
def serisini (örtük biçimi: Biçimleri): PartialFunction [(TypeInfo, JValue), ilk [herhangi biri, herhangi]] = { ilk() }
Bu, herhangi bir başka çalışma haritası serileştirmesini bozmaz.
Sadece anahtar dizeleri için sınırlı JSON nesnesi değil mi? –
Evet, JSON nesneleri yalnızca anahtarların dizeleriyle sınırlı. Pratik bir mesele olarak, yöntem isimleri, bu yüzden uygun. –
Evet, sorum şu ki, bu sınırlama olduğundan anahtar olarak dizilmemiş olan haritayı nasıl serileştirebilirsiniz (de). – Atol