5
A
答えて
5
自分で定義する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(暗黙的なフォーマット形式の)デシリアライズ:部分写像[(のTypeInfo、JValue)、マップ[でも、任意] = { マップ() かわりに定義することができ、以前の回答に加えて
0
}
これは、他の作業マップのデシリアライズを解除しません。
JSONオブジェクトはキー用の文字列のみに制限されていませんか? –
はい、JSONオブジェクトはキー用の文字列のみを持つように制限されています。彼らは実用的な問題として、メソッド名なので適合します。 –
はい、私の質問は、この制限があるため、キーとして文字列を持たないマップをどのようにシリアル化できますか(de)です。 – Atol