我正在使用liftweb来解析scala中的字符串中的JSON,其中一些记录有3个字段
val a = {"name": "Alice", "age": 21, "job": "nurse"}
但其他一些只有2个字段
val b = {"name": "Bob", "age": 30}
我创造了 case class 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
答案 0 :(得分:2)
如果你创建参数类型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
,则只需将 "writeError": {
"code": 16755,
"errmsg": "Can't extract geo keys: ...
Loop is not valid: ...
...
Edges 11 and 13 cross. Edge locations in degrees: [3.8342850, 43.6212770]-[3.8345610, 43.6218040] and [3.8345340, 43.6217530]-[3.8345610, 43.6218030]
更改为您想要的任何内容。
之后,如上所述解析应适用于两种情况。
答案 1 :(得分:0)
使用lift-json_2.11版本 2.6.3 修复此问题。我还遇到了版本为 3.2.0
的问题