2015-12-09 1 views
1

Я использую liftweb для разбора JSON из строки в Скале, некоторые записи имеют 3 поляАнализировать с помощью JSON liftweb в Скале, не пригодное значение

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

но некоторые другие имеют только 2 поля

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

Я создал случай класса Person (имя: Строка, возраст: Длинная, работа: String) и когда я называю разобрана (а) возвращать значение успешно, но когда я называю разобрана (б) появляется исключение

net.liftweb.json.MappingException: No usable value for algorithm 
Did not find value which can be converted into java.lang.String 

ответ

2

Если вы зададите тип параметра 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 все, что вы хотите по умолчанию.

После этого разбор, как вы делали выше, должен работать для обоих случаев.