2011-02-25 7 views
15

यहाँ मेरी json है:एक्सेस करना तत्वों

{"d":{"key1":"value1", 
     "key2":"value2"}} 

जानते हुए भी क्या चाबियाँ हैं बिना इस सरणी में (जावास्क्रिप्ट में) कुंजी और मूल्यों तक पहुँचने का किसी भी तरह से वहाँ है?

मेरा जेसन इस तरह से संरचित होने का कारण यह है कि जिस वेबमेम को मैं jquery के माध्यम से कॉल कर रहा हूं वह एक शब्दकोश लौटा रहा है। यदि उपरोक्त के साथ काम करना असंभव है, तो मुझे डेटा लौटने के तरीके के बारे में क्या बदलने की ज़रूरत है?

<WebMethod()> _ 
Public Function Foo(ByVal Input As String) As Dictionary(Of String, String) 
    Dim Results As New Dictionary(Of String, String) 

    'code that does stuff 

    Results.Add(key,value) 
    Return Results 
End Function 
+1

* "इस सरणी में (जावास्क्रिप्ट में) कुंजी और मूल्यों तक पहुँचने" * - क्या सरणी ..? –

उत्तर

41

आप अपने वस्तु की मनमानी गुण के माध्यम से पुनरावृति करने के लिए for..in निर्माण का उपयोग कर सकते हैं:

for (var key in obj.d) { 
    console.log("Key: " + key); 
    console.log("Value: " + obj.d[key]); 
} 
+0

बिल्कुल सही।क्या मुझे अभी भी एक 'इन इन'' का उपयोग करने की आवश्यकता है यदि केवल एक महत्वपूर्ण मूल्य जोड़ी है? – Radu

+0

@Radu आप किसी ऑब्जेक्ट के गुणों के साथ इंडेक्स के गुणों तक नहीं पहुंच सकते हैं, इसलिए आपको ... के लिए उपयोग करने के लिए कुंजी प्राप्त करने की आवश्यकता होगी। – Xenethyl

+0

@Xenethyl धन्यवाद। – Radu

8

यह आपके लिए क्या देख रहे है:

यहाँ मेरी webmethod की एक रूपरेखा है?

var data; 
for (var key in data) { 
    var value = data[key]; 
    alert(key + ", " + value); 
} 
+3

युक्ति: जावास्क्रिप्ट ऑब्जेक्ट JSON ऑब्जेक्ट्स को कॉल न करें। जेएसओएन परिवहन प्रारूप है। एक बार पार्स किया गया, कोई JSON नहीं है। –

+1

युक्ति 2: एकाधिक मानों को अलर्ट करने के लिए एक और संक्षिप्त तरीका: 'अलर्ट ([कुंजी, मान]) ' –

+1

@ एट्स गोरल var नाम के साथ मेरा निहितार्थ यह था कि इसमें JSON डेटा था, न कि यह एक JSON ऑब्जेक्ट था। गरीब पसंद, मुझे लगता है। – Xenethyl

2

शब्द "ख" का उपयोग कर, आप अभी भी कुंजी नाम का उपयोग कर रहे हैं।

var info = { 
"fname": "Bhaumik", 
"lname": "Mehta", 
"Age": "34", 
"favcolor": {"color1":"Gray", "color2":"Black", "color3":"Blue"} 
}; 

नीचे स्निपेट को देखें।

for(key in info) { 
    var infoJSON = info[key]; 
    console.log(infoJSON); 
} 

परिणाम हो सकता है,

Bhaumik 
Mehta 
Object {color1: "Gray", color2: "Black", color3: "Blue"} 

कि अंतिम पंक्ति में दिखाने के लिए नहीं करना चाहते? निम्नलिखित कोड आज़माएं:

for(key in info) { 
    var infoJSON = info[key]; 
    if(typeof infoJSON !== "object"){ 
     console.log(infoJSON); 
    } 
} 

यह कंसोल में दिखाई देने से Object {color1: “Gray”, color2: “Black”, color3: “Blue”} को खत्म कर देगा।

अब हमें सरणी मान प्राप्त करने के लिए परिवर्तनीय जानकारी जेएसओएन के माध्यम से पुनरावृत्ति करने की आवश्यकता है। कोड की निम्नलिखित पूरी शांति देखें।

for(key in info) { 
    var infoJSON = info[key]; 
    if (typeof infoJSON !== "object"){ 
     console.log(infoJSON); 
    } 
} 

for(key1 in infoJSON) { 
    if (infoJSON.hasOwnProperty(key1)) { 
     if(infoJSON[key1] instanceof Array) { 
      for(var i=0;i<infoJSON[key1].length;i++) { 
      console.log(infoJSON[key1][i]); 
      } 
     } else {console.log(infoJSON[key1]);} 
    } 
} 

और अब हम

Bhaumik 
Mehta 
Gray 
Black 
Blue 

अगर हम कुंजी का नाम या आईडी का उपयोग तो यह JSON ऑब्जेक्ट से मूल्यों को प्राप्त करने के लिए बहुत आसान है, लेकिन यहाँ हम कुंजी का उपयोग किए बिना अपने मूल्यों हो रही है के रूप में परिणाम मिला नाम या आईडी

1

इसे प्राप्त करने के लिए लूप के लिए उपयोग करें।

var dlist = { country: [ 'ENGLAND' ], name: [ 'CROSBY' ] } 
 

 
for(var key in dlist){ 
 
    var keyjson = dlist[key]; 
 
    console.log(keyjson) 
 
    }