加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何使用部分数据从json填充案例类?

发布时间:2020-12-16 19:17:02 所属栏目:安全 来源:网络整理
导读:import net.liftweb.json._import net.liftweb.json.JsonParser._object test02 extends App { implicit val formats = DefaultFormats case class User( id: Int = 0,name: String = "John Doe",gender: String = "M") val s1=""" {"id":1,"name":"Bill","g
import net.liftweb.json._
import net.liftweb.json.JsonParser._

object test02 extends App {
    implicit val formats = DefaultFormats
    case class User(
        id: Int = 0,name: String = "John Doe",gender: String = "M")

    val s1=""" {"id":1,"name":"Bill","gender":"M"} """
    var r1=Serialization.read[User](s1)
    println(r1)

    val s2=""" {"id":1} """
    var r2=Serialization.read[User](s2)
    println(r2)  

}

Second Serialization.read导致异常:net.liftweb.json.MappingException:名称没有可用值.

我怎么可能从json读取数据到case类,但如果缺少某些字段,它们将被case类的默认值替换?

解决方法

看起来很长一段时间都有一张开门票: https://www.assembla.com/spaces/liftweb/tickets/534

与此同时,一种选择是使用选项:

case class User(
        id: Int = 0,name: Option[String],gender: Option[String]) {
      def defaults = copy(
        name   = name   orElse Some("John Doe"),gender = gender orElse Some("M"))
    }
    // ...        
    val s2=""" {"id":1} """
    var r2=Serialization.read[User](s2)
    println(r2)

这应该给你:

User(1,None,None)

你可以使用这样的东西填写默认值:

val r2 = Serialization.read[User](s2).defaults

 // r2: User = User(1,Some(John Doe),Some(M))

另一种选择是为您的案例类使用其他构造函数:

case class User(id: Int,name: String,gender: String)
 object User {
   def apply(id:Int): User = User(id,"John Doe","M")
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读