我正在使用liftweb从scala中的String解析JSON,某些记录有3个字段
val a = {"name": "Alice", "age": 21, "job": "nurse"}
但是其他一些只有2场
val b = {"name": "Bob", "age": 30}
我创建了案例类Person(name:String,age:Long,job:String),当我调用parse(a)时,它成功返回值,但是当我调用parse(b)时,它出现了异常
net.liftweb.json.MappingException: No usable value for algorithm
Did not find value which can be converted into java.lang.String
如果您使用参数类型,job:String
则会遇到问题,因为这将要求参数具有值-而在您的示例中则没有。
我假设我们要使anOption[String]
和在下面的示例中仅添加多个构造函数以匹配您的参数。这样的事情应该起作用:
case class Person(name: String, age: Long, job: Option[String]){
def this(name: String, age: Long) = this(name, age, None)
}
如果你有一个默认值,并希望job
成为一个String
只是改变None
任何你想用默认值。
在那之后,您在两种情况下都可以像上面一样进行解析。