2015-04-17 3 views
0

Я использую net.liftweb анализатор для СкалеСкала/liftweb сериализации JSON

У меня есть JSON, как этот

{ 
    "k1":"v1", 
    "k2":["v21", "v22", "v23"] 
    } 

k2 поле не является обязательным, или JSON может может не иметь его. Извлечь это в случае класса

случае класс MyCC (k1: String, k2: Список [String])

Когда JSON преобразуется в случае класса, если k2 нет, то он десериализируется в пустой список , Проблема заключается в обращении к json, как я могу заставить анализатор не сериализовать это поле, если это пустой список.

+0

Это похоже на то, что означает «Вариант». – childofsoong

+0

@soong: u среднее поле k2 должно быть типа: Option [List [String]]. Я не думаю, что это хорошая идея использовать 2 континета (список, опцион) – user830818

+0

Почему бы и нет? Это именно то, что есть ... Я думаю, если вам это не нравится, вы можете просто использовать пустой список, но логика, которую вы напишете, чтобы справиться с этим именно так, - это именно то, что «Option» уже имеет в нем. – childofsoong

ответ

0

Вы должны создать custom serializer. Это должно быть хорошо для вашего дела:

import org.json4s._ 
import org.json4s.native.Serialization.write 
class NilSerializer extends CustomSerializer[List[String]](format => ({ 
    case JNothing => Nil 
    }, { 
    case Nil => JNothing 
})) 

implicit val formats = DefaultFormats + new NilSerializer 
println(write(MyCC("key", Nil))) 
>> {"k1":"key"} 
Смежные вопросы