在 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
的这个问题
我正在使用 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
的这个问题