के साथ एक कुंजी के रूप में एक स्ट्रिंग नहीं है, ऐसा लगता है जैसे लिफ्ट-जेसन उन मानचित्रों तक ही सीमित है जिनमें स्ट्रिंग्स के रूप में स्ट्रिंग्स हैं।लिफ्ट-जेसन
इस सीमा को बाईपास करने का सबसे अच्छा तरीका क्या है?
के साथ एक कुंजी के रूप में एक स्ट्रिंग नहीं है, ऐसा लगता है जैसे लिफ्ट-जेसन उन मानचित्रों तक ही सीमित है जिनमें स्ट्रिंग्स के रूप में स्ट्रिंग्स हैं।लिफ्ट-जेसन
इस सीमा को बाईपास करने का सबसे अच्छा तरीका क्या है?
अपना खुद का 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
यह सब कुछ है।
पिछले जवाब के अलावा आप के बजाय परिभाषित कर सकते हैं:
डीईएफ़ deserialize (अंतर्निहित प्रारूप: प्रारूप): PartialFunction [(TypeInfo, JValue), मानचित्र [कोई भी, किसी भी]] = { मानचित्र() }
यह किसी भी अन्य कामकाजी मानचित्र deserialization तोड़ नहीं है।
क्या JSON ऑब्जेक्ट्स केवल कुंजी के लिए तार नहीं हैं? –
हां, JSON ऑब्जेक्ट्स केवल कुंजी के लिए तारों तक ही सीमित हैं। वे एक व्यावहारिक मामले के रूप में, विधि नाम हैं, इसलिए यह उपयुक्त है। –
हां, मेरा सवाल यह था कि आप (डी) मानचित्र को क्रमबद्ध कैसे कर सकते हैं जो इस सीमा के बाद कुंजी के रूप में स्ट्रिंग नहीं कर रहा है। – Atol