2012-02-07 11 views
9

Sto utilizzando GSON per deserializzare alcuni JSON. Il JSON è:GSON genera un'eccezione durante l'analisi vuota Campo data

{ 
    "employee_id": 297, 
    "surname": "Maynard", 
    "givenname": "Ron", 
    "lastlogin": "", 

...

L'Oggetto Employee ha un lastlogin campo Data:

public class Employee { 
private Integer employee_id; 

private String surname; 

private String givenname; 

private Date lastlogin; 

Il problema che ho è che quando il valore lastlogin non viene popolato, è una stringa vuota nel JSON, quindi il parser GSON genera:

java.text.ParseException: Unparseable date: "" 
at java.text.DateFormat.parse(DateFormat.java:337) 
at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79) 
at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66) 

What's th e il solito modo di aggirare questo?

risposta

30

Se non è possibile controllare l'input (ovvero la parte di generazione JSon) ma si conosce il formato come dovrebbe essere quando non è vuoto, è sufficiente scrivere un deserializzatore in grado di gestire valori vuoti, come ad es.

GsonBuilder gsonBuilder = new GsonBuilder(); 
    gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { 
     DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
     @Override 
     public Date deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) 
       throws JsonParseException { 
      try { 
       return df.parse(json.getAsString()); 
      } catch (ParseException e) { 
       return null; 
      } 
     } 
    }); 
    Gson gson = gsonBuilder.create(); 

Vedi https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializ

2

Ecco perché è una stringa vuota, che Data non sa come gestire. Se si guarda il numero GSON Code, si vede che sta analizzando solo ciecamente la stringa usando DateFormat.parse, che non gestisce bene le virgolette.

Hai provato a utilizzare null? Prova a usare null se è vuoto. Dal codice per GSON Code per DateTypeAdapter, gestisce gli oggetti JSONNull bene, salta semplicemente su di essi.

Problemi correlati