0

私は次のようなケースクラスを持っています:

case class Cart(cart_id :UUID, cart_entries :Map[String,CartEntry]){

  //override def toString: String = "Saini CartId = " + cart_id.toString

}

これを json に変換するために net.liftweb.json._ を使用しています:

implicit val formats = Serialization.formats(NoTypeHints) + new UUIDserializer
val json = write(cart)
println(json)

Jsonは次のように出てきます

{"cart_id":"68eb787f-746c-4320-9ef4-8b5c7f0d7e21","cart_entries":[{"_1":"ABC","_2":{"sku_id":"ABC","quantity":12,"price":213.0}}]}

私のjsonをカートオブジェクトに変換している間:

val jValue = read[Cart](json)

この例外が発生しています。

[エラー] [12/22/2016 17:11:23.784] [System-akka.actor.default-dispatcher-3] [akka://System/user/68eb787f-746c-4320-9ef4-8b5c7f0d7e21] 使用可能な値がありませんcart_entries の場合、型インターフェース scala.collection.mutable.Map、JArray(List(JObject(List(JField(_1,JString(ABC)))、JField(_2,JObject(List(JField(sku_id,JString(ABC))) のコンストラクターはありません, JField(quantity,JInt(12)), JField(price,JDouble(213.0)))))))) net.liftweb.json.MappingException: cart_entries に使用できる値がありません 型インターフェイス scala.collection.mutable のコンストラクターがありません.Map, JArray(List(JObject(List(JField(_1,JString(ABC))), JField(_2,JObject(List(JField(sku_id,JString(ABC))), JField(数量,JInt(12)), JField (価格、JDouble(213.0))))))))) net.liftweb.json.Meta$.fail(Meta.scala:191) で net.liftweb.json.Extraction$.mkValue$1(Extraction.scala:357) net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$build$1(Extraction.scala:317) で net.liftweb.json.Extraction$$anonfun$14.apply(Extraction.scala:253) ) net.liftweb.json.Extraction$$anonfun$14.apply(Extraction.scala:253) で scala.collection.immutable.List.map(List.scala:27​​7) で net.liftweb.json.Extraction$.instantiate $1(Extraction.scala:253) で net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:286) で net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$build$1(Extraction .scala:315) net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$extract0(Extraction.scala:366) at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$ $extract0(Extraction.scala:199) で net.liftweb.json.Extraction$.extract(Extraction.scala:43) で net.liftweb.json.JsonAST$JValue.extract(JsonAST.scala:312) at net.liftweb.json.Serialization$.read(Serialization.scala:58) at どうすればいいですか?

4

1 に答える 1

2

cart_entries フィールドは として定義されていscala.collection.mutable.Mapます。Lift の JSON シリアライゼーションは、マップ (可変または不変) をシリアライズする方法を認識していますが、可変マップにデシリアライズする方法は認識していません。これを修正するには、マップを次のように定義するか、変更可能な型をサポートするようにフォーマットにscala.collection.immutable.Map追加します。TypeHints

于 2016-12-22T15:45:31.857 に答える