2009-02-08 6 views
7

Ich habe einen JSON-codierten Datensatz, den ich über Ajax abrufen kann. Einige der Datenpunkte, die ich abrufen möchte, werden uns als null oder leer zurückkommen.null/leer json wie man es überprüft und nicht ausgeben?

Ich möchte jedoch nicht, dass diese Null oder leer für den Endbenutzer angezeigt oder an andere Funktionen weitergegeben werden.

Was ich jetzt tue ist die Überprüfung für

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

jedoch für jede Zeile ich mich durch mehr gehen finden, wenn Aussagen, und es scheint sehr ineffizient. Gibt es einen besseren Weg, dies zu tun?

Antwort

15

Da JSON einfach ein Datenformat ist, gibt es wirklich keine Möglichkeit zu wissen, welches Ihrer Datenelemente null ist, wenn Sie es nicht explizit überprüfen. Sie können Ihren Code immer umgestalten, um ihn kompakter und leichter lesbar zu machen. Sie müssen jedoch jedes Element explizit überprüfen, wenn Sie vorher nicht wissen, welches null ist und welches Daten enthält.

Während ich weiß nicht, was Ihr Code tun soll, hier ist ein Beispiel dafür, wie man es Refactoring könnte es kompakter zu machen:

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

verwenden Sie, ob die Eigenschaft zu dem Objekt gehört aus diesem Grund über Prototypkette, nicht hasOwnProperty verwenden zu überprüfen oder hinzugefügt ich Ihnen Daumen gebe auf ... – vsync

4

Ich bin mir nicht ganz sicher, was Sie tun wollen ... Sie sagen, dass Sie sie nicht an andere Funktionen übergeben wollen, so nehme ich an Sie sie löschen wollen:

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

    } 
} 

Die Prüfung auf hasOwnProperty sicher zu machen, ist, dass es nicht etwas Eigentum von der Eigentumskette.

1

Oder Sie könnten nur die

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