2009-02-08 17 views
7

मुझे एक जेसन एन्कोडेड डेटासेट मिला है जिसे मैं AJAX के माध्यम से पुनर्प्राप्त करता हूं। कुछ डेटा पॉइंट जिन्हें मैं पुनर्प्राप्त करने का प्रयास कर रहा हूं, वे हमें वापस या खाली कर देंगे।शून्य/खाली जेसन कैसे इसकी जांच करें और आउटपुट नहीं?

हालांकि, मैं नहीं चाहता कि उन अंतिम या खाली को अंतिम उपयोगकर्ता को प्रदर्शित किया जाए, या अन्य कार्यों पर पारित किया जाए।

अब मैं क्या कर रहा हूँ के लिए

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

जाँच कर रहा है हालांकि, प्रत्येक पंक्ति मैं अपने आप को अगर बयान कई के माध्यम से जा पाते हैं के लिए है, और यह बहुत अक्षम लगता है। क्या ऐसा करने के लिए इससे अच्छा तरीका है?

उत्तर

15

चूंकि JSON बस एक डेटा प्रारूप है, इसलिए वास्तव में यह जानने का कोई तरीका नहीं है कि आपके डेटा सदस्य कौन सा शून्य होंगे जब तक आप उन्हें स्पष्ट रूप से जांच न लें। आप इसे हमेशा अधिक कॉम्पैक्ट और पढ़ने के लिए आसान बनाने के लिए अपने कोड को दोबारा कर सकते हैं, लेकिन आपको प्रत्येक आइटम को स्पष्ट रूप से जांचना होगा यदि आप पहले से नहीं जानते हैं जो शून्य होगा और इसमें डेटा होगा।

जबकि मैं नहीं जानता कि अपने कोड क्या करना चाहिए है क्या, यहाँ आप इसे कैसे refactor हैं इसका एक उदाहरण है यह अधिक कॉम्पैक्ट बनाने के लिए:

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

इस्तेमाल कर सकते हैं आप कि प्रॉपर्टी वस्तु के अंतर्गत आता है या प्रोटोटाइप श्रृंखला के माध्यम से कहा, इस कारण मैं तुम्हें नापसंद रहा हूं जाँच करने के लिए hasOwnProperty का उपयोग नहीं किया ... – vsync

4

मैं तुम्हें क्या की पूरी तरह से यकीन नहीं है क्या करना चाहते हैं ... आप कहते हैं कि आप उन्हें अन्य कार्यों के लिए पर पारित करने के लिए तो मैं आप उन्हें हटाना चाहते हैं मान नहीं करना चाहती:

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

    } 
} 

hasOwnProperty के लिए चेक करें कि ऐसा नहीं है बनाने के लिए है संपत्ति श्रृंखला से कुछ संपत्ति।

1

या फिर आप

int data=0; 
try{ 
    data=json.getInt("Data"); 
}catch(Exception e){ 
    data=anydefaultdata; 
} 
संबंधित मुद्दे