首页 > 解决方案 > 当json字符串中缺少某些属性时,将json字符串反序列化为case类

问题描述

当使用jackson的json字符串中缺少某些属性时,我正在尝试将json字符串反序列化为case类

例如。

case class ParsedPage(crawlDate: Option[String], domain: Option[String], url:Option[String], text: Option[String], abc: Option[Long])

val js1 = """ {
"crawlDate": "ddkke",
"domain": "0x20.be",
"url": "http://www.beer.com?title=99_Bottles_of_Beer&id=6214",
"text": "99 Bottles of Beer From Whitespace  Subpages",
"abc": 123
}"""

val js2 = """ {
"domain": "0x20.be",
"url": "http://www.beer.com?title=99_Bottles_of_Beer&id=6214",
"text": "99 Bottles of Beer From Whitespace  Subpages",
"abc": 123
}"""

应该给我

Ans1 = ParsedPage(Some("ddkke"), Some("0x20.be"), Some("http://www.beer.com?title=99_Bottles_of_Beer&id=6214", Some("99 Bottles of Beer From Whitespace  Subpages"), Some(123)) 

Ans2 = ParsedPage(None, Some("0x20.be"), Some("http://www.beer.com?title=99_Bottles_of_Beer&id=6214", Some("99 Bottles of Beer From Whitespace  Subpages"), Some(123)) 

我试过的

import com.fasterxml.jackson.databind._
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

val objectMapper = new ObjectMapper() with ScalaObjectMapper
objectMapper.registerModule(DefaultScalaModule)
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

val ans = objectMapper.readValue[ParsedPage](js)

获取异常:

com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple type, class ParsedPage] value failed: null

标签: scalajacksonjson-deserialization

解决方案


推荐阅读