JSON

2015-12-26 6 views
5

में ऑब्जेक्ट्स की सरणी से केवल एक तत्व प्राप्त करें I JSON फ़ाइल से केवल नाम कैसे प्राप्त कर सकता हूं। कोड "file.json" से डेटा प्राप्त करने के लिए कोड पूरी तरह से काम कर रहा है यानी यह निश्चित रूप से समस्या नहीं है।JSON

जावास्क्रिप्ट:

var data = []; 
 
function getName() { 
 
    //what should I write here to get only name from the first object i.e. John 
 
    //with this: data[0].name I am getting error! 
 
} 
 

 
var xhttp; 
 
if(window.XMLHttpRequest) 
 
    xhttp = new XMLHttpRequest(); 
 
else 
 
    xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
 
    
 
xhttp.onreadystatechange = function() { 
 
    if(xhttp.readyState == 4) { 
 
    data = JSON.parse(xhttp.responseText); 
 
    getName(); 
 
    } 
 
} 
 

 
xhttp.open("GET","file.json",true); 
 
xhttp.send();

"file.json" - JSON:

[ 
 
    { 
 
    "name":"John", 
 
    "city":"London" 
 
    }, 
 
    { 
 
    "name":"Maria", 
 
    "city":"Rome" 
 
    } 
 
]

+0

('onreadystatechange' और 'readyState' के बजाय, आप केवल' ऑनलोड' 'का उपयोग कर सकते हैं।) – Rudie

+0

मेरे लिए ठीक काम करता है, जैसा कि कोई त्रुटि नहीं है। आपकी त्रुटि क्या है? https://jsfiddle.net/rudiedirkx/0xf62ny6/ संपूर्ण डेटा ऑब्जेक्ट लॉग करता है, और फिर 'डेटा [0] .name' – Rudie

+1

त्रुटि क्या है? फ़ंक्शन में मान पास करने के बजाय आप वैश्विक चर का उपयोग क्यों कर रहे हैं? –

उत्तर

6

var data = []; 
function getName(data) { 
    return data[0].name; 
} 

var xhttp; 
if(window.XMLHttpRequest) 
    xhttp = new XMLHttpRequest(); 
else 
    xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

xhttp.onreadystatechange = function() { 
    if(xhttp.readyState == 4) { 
    data = JSON.parse(xhttp.responseText); 
    getName(data); 
    } 
} 

xhttp.open("GET","file.json",true); 
xhttp.send(); 

इसके अलावा समारोह के माध्यम से चर डेटा दर्रा, अगर आप सभी के नाम प्राप्त करना चाहते हैं, तो आप कुछ इस तरह कर सकते हैं:

function getName(data) { 
    var names = []; 
    for (var i = 0; i < data.length; i++) { 
     names.push(data[i].name); 
    } 
    return names; 
} 

(डेटा सरणी डेटा है)

+0

है, यह निश्चित रूप से इंडेक्स –

+0

का पहला नाम देता है, लेकिन ऐसा नहीं है कि आप चाहते थे? या आप नामों की एक सरणी वापस करना चाहते हैं? –

+0

मुझे लगता है कि इस प्रश्न का लेखक जेसन फ़ाइल में सभी नाम प्राप्त करने के लिए देख रहा है, केवल एक ही नाम नहीं ढूंढ रहा –

4

उपयोग Array.prototype.map() अपने सरणी के आइटम transfrom रहे हैं:

data.map(function(item) { 
    return item.name 
}); 
+0

क्या यह jQuery फ़ंक्शन है? –

+0

नहीं, यह शुद्ध जावास्क्रिप्ट – madox2

1

आपका getName समारोह इस तरह दिखना चाहिए:

function getName(){ 
    a.forEach(function(i,j){ 
    console.log(i.name); 
    }); 
} 
0

यह उल्लेखनीय है कि JSON डेटाटाइप सीधे मानक जावास्क्रिप्ट डेटाटाइप में मैप किए जाते हैं। इसका मतलब है कि JSON सरणी जैसी कोई चीज नहीं है, एक बार जब आप JSON.parse() स्ट्रिंग करते हैं, तो आपको सादा जावास्क्रिप्ट प्राइमेटिव्स मिलते हैं: सरणी, ऑब्जेक्ट्स, स्ट्रिंग्स, नंबर इत्यादि

इसलिए JSON सरणी से कोई तत्व प्राप्त करना केवल तत्व को एक्सेस करना है एक मानक जावास्क्रिप्ट सरणी के। यह आमतौर पर स्क्वायर ब्रैकेट ऑपरेटर var element = array[index] द्वारा प्राप्त किया जाता है।

आपका कोड कई हिस्सों में तोड़ दिया गया है जो सरणी तत्व पहुंच से संबंधित नहीं हैं।

सबसे पहले, आप data चर को अपूर्ण पर परिभाषित करते हैं - आपको बस इसकी आवश्यकता नहीं है (कम से कम नमूना के अनुसार)।

फिर, आप इसे एक खाली सरणी के साथ प्रारंभ करते हैं - मुझे नहीं पता कि क्यों।

आपके onreadystatechange कॉलबैक शब्दों में व्यक्त किए जाने पर सरल है: आपको एक स्ट्रिंग मिलती है, इसे जेसन के रूप में पार्स करें और फिर परिणाम की आपूर्ति getName पर कॉल करें। इसका मतलब है कि आपके getName() को data तर्क की आवश्यकता होनी चाहिए जिसे आप फ़ंक्शन के भीतर एक्सेस करते हैं।