您需要为您的类型创建一个自定义序列化程序。像这样:
import org.json4s.{CustomSerializer,DefaultFormats,Extraction,JObject,JString}
import org.json4s.jackson.JsonMethods.parse
import org.json4s.jackson.Serialization
class PartSerializer extends CustomSerializer[Part](format => ( {
case JObject(("type",JString(typeString)) :: ("data",obj) :: Nil) =>
implicit val f = format
typeString match {
case "text" =>
Extraction.extract[Text](obj)
case "image" =>
Extraction.extract[Image](obj)
}
},{
case text: Text =>
implicit val f = format
JObject(List(
("type",JString("text")),("data",JObject(List(
("text",JString(text.text))))
),))
case img: Image =>
implicit val f = format
JObject(List(
("type",JString("image")),JObject(List(
("url",JString(img.url))))
),))
}
))
然后您可以像这样使用它:
implicit val formats = DefaultFormats + new PartSerializer()
// Parse JSON
val part = Extraction.extract[Part](parse(json))
// Generate JSON
val json = Serialization.write(part)
如果将Part
数据嵌入外部对象中,这也将起作用。
本文链接:https://www.f2er.com/3161274.html