Eu estou usando liftweb para analisar JSON de String em scala, alguns dos registros têm 3 campos
val a = {"name": "Alice", "age": 21, "job": "nurse"}
mas alguns outros têm apenas 2 campos
val b = {"name": "Bob", "age": 30}
eu criei case class Pessoa (nome: String, idade: Long, job: String) e quando eu chamo parse (a) ele retorna valor com sucesso, mas quando eu chamo parse (b) aparece exceção
net.liftweb.json.MappingException: No usable value for algorithm
Did not find value which can be converted into java.lang.String
Respostas:
2 para resposta № 1Se você fizer o tipo de parâmetro job:String
você terá problemas, pois isso exigiria que o parâmetro tivesse um valor - e, no seu exemplo, ele não possui.
Eu vou assumir que nós queremos fazer disso uma Option[String]
e no exemplo abaixo, basta adicionar vários construtores para corresponder aos seus parâmetros. Algo como isso deve funcionar:
case class Person(name: String, age: Long, job: Option[String]){
def this(name: String, age: Long) = this(name, age, None)
}
Se você tivesse um valor padrão e quisesse job
ser um String
apenas mude o None
para o que você quiser por padrão.
Depois disso, a análise como você fez acima deve funcionar nos dois casos.