2013-05-14 6 views
6

मैं दो JSON परिणाम के प्रकार के लिए प्रत्येक कार्य:jQuery एकल और एक से अधिक तत्वों

{ 
"person":{ 
    "fname": "Homer", 
    "lname": "Simpson" 
    } 
} 

{ 
"person":[ 
    { 
    "fname": "Homer", 
    "lname": "Simpson" 
    }, 
    { 
    "fname": "Marge", 
    "lname": "Simpson" 
    } 
    ] 
} 

मैं एक jQuery "प्रत्येक" उपयोग करना चाहते हैं:

$.each(response.person, function(i, person){... 

लेकिन "मैं" और "व्यक्ति "जेएसओएन के एक बनाम एकाधिक व्यक्ति हैं जब" अलग हैं। मैं देख रहा हूँ एक व्यक्ति प्रतिक्रिया सरणी "[]" नहीं है, लेकिन जब मैं:

$.each([response.person], function(i, person){... 

तो कई व्यक्तियों काम नहीं करता। मैं चीजों को सामान्य करने का एक तरीका ढूंढ रहा हूं ताकि मैं लगातार "प्रत्येक" का उपयोग कर सकूं।

+0

वहाँ किसी भी तरह से आप को बदलने के लिए के लिए कैसे परिणाम उत्पन्न कर रहे हैं है? –

+0

क्या यह YQL से प्रतिक्रिया है? yql यह एक परिणाम बनाम बहु के साथ करता है। –

उत्तर

4

परीक्षण करें कि यह एक सरणी है या नहीं।

$.each(($.isArray(response.person) ? response.person : [response.person]), function(i, person){... 

या आप वस्तु यात्रा करने से पहले संशोधित कर सकते हैं:

if (!$.isArray(response.person)) { 
    response.person = [response.person]; 
} 
$.each(response.person, function(i, person){... 
+0

यह बहुत अच्छा काम करता है, thx! – bmw0128

+1

@ bmw0128 मैं गोलियों के समाधान को पसंद करता हूं, हालांकि। –

+0

मैंने अभी गोलियों से समाधान देखा। यह भी अच्छा है, लेकिन मैंने केविन के पहले को देखा, और मुझे लगता है कि वे काफी बराबर हैं। – bmw0128

6

आदर्श रूप में आप एक सरणी शुरू में आप के लिए दिया है, लेकिन आप यह कर सकते हमेशा .concat एक खाली सरणी के लिए परिणाम नहीं। यह लगातार पाश करने के लिए आप की अनुमति देगा:

$.each([].concat(response.person), function(i, person){... 

http://jsfiddle.net/MtzH8/

+0

मुझे पता था कि यह अस्तित्व में था, मुझे यह पता लगाना मुश्किल था कि मैं Google के माध्यम से क्या खोज रहा था लेकिन यहां यह है –

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