gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:19:06 25 4
gpt4 key购买 nike

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)

}

第二个 Serialization.read 导致异常:net.liftweb.json.MappingException:没有可用的名称值。

我怎么可能将数据表单 json 读入 case 类,但是如果某些字段丢失,它们会被 case 类中的默认值替换?

最佳答案

看起来这方面的公开票已经有一段时间了:https://www.assembla.com/spaces/liftweb/tickets/534

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

    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")
}

关于scala - 如何用部分数据从json填充案例类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com