2009-02-08 2 views
7

Ho un set di dati con codifica json che richiamo tramite ajax. Alcuni dei punti di dati che sto cercando di recuperare ci torneranno nulli o vuoti.null/vuoto json come controllarlo e non viene emesso?

Tuttavia, non voglio che quelli nulli o vuoti vengano visualizzati all'utente finale o trasmessi ad altre funzioni.

Quello che sto facendo ora sta controllando per

 
    if(this.cityState!='null'){ 
      // do some stuff here 
} 

Tuttavia, per ogni linea mi trovo a passare attraverso molteplici if, e sembra molto inefficiente. C'è un modo migliore per farlo?

risposta

15

Dal momento che JSON è semplicemente un formato di dati, non c'è davvero modo di sapere quale dei dati membri sarà nullo a meno che non li controlli esplicitamente. Puoi sempre rifattorizzare il tuo codice per renderlo più compatto e più facile da leggere, ma dovrai controllare esplicitamente ciascun elemento se non sai in anticipo quale sarà nullo e che conterrà i dati.

Mentre io non so che cosa si suppone che il codice a fare, qui è un esempio di come si potrebbe refactoring per renderlo più compatto:

var data = { Name: "John Doe", Age: 25, Address: null, CityState: "Denver, CO" }; 
for (member in data) { 
    if (data[member] != null) 
     // Do work here 
} 
+1

non è stato utilizzato hasOwnProperty per verificare se la proprietà appartiene all'oggetto o aggiunti tramite catena di prototipi, per questo motivo vi sto dando pollice verso ... – vsync

4

io non sono del tutto sicuro di quello che vuole fare ... tu dici che non vuoi di trasmetterli ad altre funzioni quindi immagino che si desidera eliminare:

var data = {a:"!",b:"null", c:null, d:0, e:"", hasOwnProperty:"test"}; 

var y; 
for (var x in data) { 
    if (Object.prototype.hasOwnProperty.call(data,x)) { 
     y = data[x]; 
     if (y==="null" || y===null || y==="" || typeof y === "undefined") { 
      delete data[x]; 
     } 

    } 
} 

Il controllo per hasOwnProperty è quello di assicurarsi che non sia alcune proprietà dalla catena di proprietà.

1

Oppure si può semplicemente utilizzare il

int data=0; 
try{ 
    data=json.getInt("Data"); 
}catch(Exception e){ 
    data=anydefaultdata; 
}