2009-02-08 45 views
7

Tengo un conjunto de datos codificados json que recupero a través de ajax. Algunos de los puntos de datos que estoy tratando de recuperar nos devolverán nulos o vacíos.nulo/vacío json cómo comprobar y no la salida?

Sin embargo, no quiero que esos nulos o vacíos se muestren al usuario final o pasen a otras funciones.

Lo que estoy haciendo ahora es la comprobación de

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

Sin embargo, para cada línea me encuentro pasando por múltiples sentencias if, y parece muy ineficiente. ¿Hay una mejor manera de hacer esto?

Respuesta

15

Dado que JSON es simplemente un formato de datos, realmente no hay manera de saber cuáles de sus miembros de datos serán nulos a menos que los compruebe explícitamente. Siempre puede refactorizar su código para hacerlo más compacto y fácil de leer, pero deberá verificar cada elemento explícitamente si no sabe de antemano cuál será nulo y cuál contendrá datos.

Aunque no sé lo que se supone que el código para hacerlo, aquí es un ejemplo de cómo se puede refactorizar para hacerla más compacta:

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

que no ha utilizado hasOwnProperty para comprobar si la propiedad pertenece al objeto o añadido a través de la cadena de prototipo, por eso le estoy dando pulgar hacia abajo ... – vsync

4

no estoy completamente seguro de lo que querer hacer ... usted dice que usted no desea pasarlos a otras funciones, así que supongo que quiere eliminar ellas:

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]; 
     } 

    } 
} 

El cheque por hasOwnProperty es asegurarse de que no es alguna propiedad de la cadena de propiedades.

1

O usted podría utilizar el

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