2016-01-28 4 views
0

У меня есть JSON в следующем формате:десериализации JSON с JSON4S

{ 
    "id": 1913548255, 
    "notification": "NotificationReceived", 
    "deviceGuid": "e60d6085-2aba-48e9-b1c3-73c673e414be", 
    "timestamp": "2016-01-28T20:34:34.167", 
    "parameters": { 
    "jsonString": "{\"mac\":\"bc6a29abd973\",\"uuid\":\"f000aa1104514000b000000000000000\",\"value\":0.27328648477047685}" 
    } 
} 

Я десериализации его, чтобы получить следующие классы, так что:

case class Parameters(mac: String, uuid: String, value: Double) 
case class Notification(id: BigInt, notification: String, deviceGuid: String, timestamp: String, perameters: Parameters) 

Я знаю, что я должен написать CustomSerializer. Но у меня нет большого опыта. Пожалуйста, направляй меня. Спасибо за помощь.

ответ

0

Я решил не иметь дело с десериализатором, но делаю это обычным способом. Я отправляю код, чтобы он мог кому-то помочь.

case class Parameters(mac: String, uuid: String, value: Double) 
case class Notification(id: Int, notification: String, deviceGuid: String, timestamp: String, parameters: Map[String, String]) 
case class FinalNotification(id: Int, notification: String, device_guid: String, timestamp: String, mac: String, uuid: String, value: Double) 

implicit val formats = DefaultFormats 
val n = parse(v).extract[Notification] 

def convertJson(json: Option[String]): Parameters = json match { 
    case None => throw new IllegalArgumentException("Json can't be converted. ") 
    case Some(j) => parse(j).extract[Parameters] 
} 

val param = convertJson(n.parameters.get("jsonString")) 

FinalNotification(n.id, n.notification, n.deviceGuid, n.timestamp, param.mac, param.uuid, param.value)