在 scala 中使用没有可用值的 liftweb 解析 json

Parse json using liftweb in scala with no usable value

我正在使用 liftweb 从 scala 中的字符串解析 JSON,一些记录有 3 个字段

val a = {"name": "Alice", "age": 21, "job": "nurse"}

但其他一些只有 2 个字段

val b = {"name": "Bob", "age": 30}

我创造了 case class Person(姓名: String, age: Long, job: String) 当我调用 parse(a) 时它 return 值成功,但是当我调用 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,您将遇到问题,因为这需要参数具有值 - 而在您的示例中则不需要。

我假设我们想要将其设为 Option[String],在下面的示例中,只需添加多个构造函数来匹配您的参数。这样的事情应该有效:

case class Person(name: String, age: Long, job: Option[String]){
  def this(name: String, age: Long) = this(name, age, None)
}

如果您有默认值,并且希望 job 成为 String,只需将 None 默认更改为您想要的任何值即可。

之后,像上面那样进行解析应该适用于这两种情况。

使用 lift-json_2.11 版本 2.6.3 修复此问题。我也遇到了版本 3.2.0

的这个问题