【问题标题】:Convert case class containing objects containing mutableMap to json and back using lift将包含包含 mutableMap 的对象的案例类转换为 json 并使用提升返回
【发布时间】:2023-04-01 23:28:02
【问题描述】:

我有一个案例类:

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

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

}

我正在使用 net.liftweb.json._ 将其转换为 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)

我遇到了这个异常。

[错误] [2016 年 12 月 22 日 17:11:23.784] [系统-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(数量,JInt(12)), JField(价格,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) 在 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) 在 net.liftweb.json.Serialization$.read(Serialization.scala:58) 在我该怎么办?

【问题讨论】:

    标签: json lift mutablemap


    【解决方案1】:

    您的 cart_entries 字段定义为 scala.collection.mutable.Map。 Lift 的 JSON 序列化知道如何序列化 Map(可变或不可变),但不知道如何反序列化为可变 Map。要修复它,请将您的地图定义为 scala.collection.immutable.Map 或将 TypeHints 添加到您的格式中以支持可变类型。

    【讨论】:

    • 能否分享代码以添加 TypeHints 以支持可变类型?
    猜你喜欢
    • 2016-12-06
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2016-02-16
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多