2012-07-08 14 views
5

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?

+0

Sadece anahtar dizeleri için sınırlı JSON nesnesi değil mi? –

+0

Evet, JSON nesneleri yalnızca anahtarların dizeleriyle sınırlı. Pratik bir mesele olarak, yöntem isimleri, bu yüzden uygun. –

+0

Evet, sorum şu ki, bu sınırlama olduğundan anahtar olarak dizilmemiş olan haritayı nasıl serileştirebilirsiniz (de). – Atol

cevap

5

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.

0

ö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.