【发布时间】:2017-01-11 05:59:10
【问题描述】:
使用 Jackson (>2.0) 库,我想将来自我无法控制的后端的数据反序列化为单个对象,该对象包含包装器的 id 以及原始数据中的所有数据包装器中包含的 JSON 字符串。在不定义包装类的情况下,如何编写自定义 Jackson 反序列化器来创建 Movie 的新对象?
数据:
{
"id": "1",
"rawMovieData": "{\"name\": \"Office Space\", \"director\": \"Mike Judge\"}"
}
数据模型:
case class Movie(id: String, name: String, director: String)
我当前的反序列化器如下所示:
class MovieDeserializer extends JsonDeserializer[Movie] {
override def deserialize(jp: JsonParser, ctxt: DeserializationContext): Movie {
val wrapper: JsonNode = jp.getCodec.readValue(jp)
val id: String = wrapper.get("id").asInstanceOf[TextNode].textValue
val rawMovie: String = wrapper.get("rawMovieData").asInstanceOf[TextNode].textValue
//How do I now deserialize rawMovie?
Movie(id, name, director)
}
}
注意:我的问题被定义为 Scala,但我认为 Java 方法足够相似以至于无关紧要。因此,Java 中的答案是可以接受的。
【问题讨论】:
标签: java json scala jackson deserialization