2011-07-01 16 views
9

निम्नलिखित फ़ीड का उपयोग करता है, तो:जाँच हो रही है एक तत्व json में मौजूद है

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=microsoft&include_rts=1&count=10

मैं सफलतापूर्वक इस के माध्यम से लूप करने में सक्षम विवरण मैं अपने html पृष्ठ पर प्रदर्शित करना चाहते प्राप्त करने के लिए कर रहा हूँ।

हालांकि, मुझे यह जांचना होगा कि retweeted_status.user.profile_image_url मौजूद है, और मुझे यकीन नहीं है कि यह कैसे करें?

data[i].retweeted_status.user.profile_image_url

अगर data[i].retweeted_status.user.profile_image_url मौजूद नहीं है, यह शून्य या अपरिभाषित वापस नहीं करता है, मैं सिर्फ निम्न त्रुटि मिलती है:

वर्तमान में मैं डेटा जहां data द्वारा jQuery-ajax दिया जाता है के माध्यम से पाशन कर रहा हूँ:

cannot read property 'user' of undefined

+4

यदि (डेटा [i] .retweeted_status && डेटा [i] .retweeted_status.user && डेटा [i] .retweeted_status.user.profile_image_url) – Abhijit

+0

@ अभिजीत, कृपया इसे एक उत्तर के रूप में जोड़ें। – oshirowanen

उत्तर

27

कि त्रुटि संदेश पता चलता है कि या तो अपने डेटा [i] या अपने retweeted_status अपरिभाषित है, जो y का मतलब जेसन पाने के लिए हमारी कॉल सबसे अधिक असफल होने की संभावना है। जब ट्विटर से डेटा वापस किया जाता है तो यह एक प्रोफाइल छवि यूआरएल होगा, क्योंकि वे अपलोड किए गए लोगों के लिए अंडे जैसी छवि दिखाते हैं।

if (typeof(retweeted_status) != "undefined") 
{ 
//code for what to do with json here 
} 
+0

यदि ट्वीट एक रिटविट है, तो मैं retweeted_status.user.profile_image_url प्राप्त करना चाहता हूं, user.profile_image_url नहीं। वे 2 अलग-अलग तत्व हैं। कृपया ऊपर पोस्ट किए गए जेसन लिंक की समीक्षा करें। – oshirowanen

0

आप पाशन और एक्सेस कर रहे हैं नेस्टिंग वस्तुओं:: आप अपने पाश के लिए पहले इस रखना चाहिए

if(!data) 
    return; 

while(data.length) 
{ 
    var tweet_data = data.shift(); 

    /* do some work */ 

    if(!tweet_data|| !tweet_data.retweeted_status) 
     continue; 

    var retweeted_status = tweet_data.retweeted_status; 

    /* do your other work */ 
} 

इस पाश है, जो न सबसे जब तक कुशल है नहीं रह गया है सरणी अनुक्रमणिका का उपयोग करने की जरूरत है आपको विशेष रूप से कुछ के लिए सूचकांक की आवश्यकता है। इसके बजाए, यह सरणी से पहले तत्व को पॉप करता है और उस ऑब्जेक्ट का सीधे उपयोग करता है। लूप आंतरिक तब tweet_data पर किसी संपत्ति के अस्तित्व की जांच कर सकते हैं।

2 कारणों (जैसे objA.child.property) के लिए dereferencing से अधिक 1 स्तर का उपयोग कर से बचने की कोशिश: 1) आप शुरू से ही एक वस्तु के अस्तित्व की जांच कर सकते हैं और अगर यह मौजूद नहीं है, बाहर कूद या डिफ़ॉल्ट आवंटित मान। 2) प्रत्येक बार जावास्क्रिप्ट को property विधि तक पहुंचने की आवश्यकता होती है, इसे पहले childobjA के साथ और property तक पहुंचना होगा। बड़े लूप में धीमा हो सकता है।

0

$.grep() पर एक नज़र डालें। यह आपको JSON ऑब्जेक्ट्स के माध्यम से लूप करने में मदद करता है। मैंने आपके द्वारा प्रदान किए गए लिंक पर इसका इस्तेमाल किया। मैंने इसे ट्वीट्स के माध्यम से लूप करने के लिए इस्तेमाल किया और रीटविड्ड उपयोगकर्ता छवियों को ढूंढ लिया। http://jsfiddle.net/q5sqU/7/

0

एक और बात आप कर सकते हैं, जो मेरे लिए काम किया है::

if(retweeted_status) { 
    // your code 
} 
8

मुझे लगता है कि यह एक अच्छा जवाब है:

if('key' in myObj) 
1
if (something !== undefined) { 
    ... 
} 
तुम मेरे कोड यहाँ पर एक नज़र हो सकता है

... या इससे भी बेहतर:

if (typeof something != "undefined") { 
    ... 
} 
+0

यह एक संपूर्ण जवाब है, लेकिन सबसे अच्छा विकल्प सबसे पहले, दूसरा सबसे अच्छा दूसरा डालने पर विचार करें, और क्यों समझाएं। – Cypher909

संबंधित मुद्दे