2011-02-25 31 views
15

İşte benim json var:Erişme elemanları

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

anahtarları bilmeden bu dizide (javascript) anahtarlar ve değerler ulaşma herhangi bir yolu var mı?

Json'umun bu şekilde yapılandırılmasının nedeni, jquery ile aradığım web sayfasının bir sözlük döndürmesidir. Yukarıdakilerle çalışmak imkansızsa, verileri iade etme biçimim hakkında neyi değiştirmek zorundayım?

<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

* "Bu dizideki (javascript) anahtarlar ve değerler erişme" * - Ne dizisi ..? –

cevap

41

Sen nesnenin keyfi özelliklerini yinelemek için for..in yapısı kullanabilirsiniz:

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

Mükemmel.Tek bir anahtar değer çifti varsa hala 'in için' kullanmam gerekiyor mu? – Radu

+0

@Radu Bir nesnenin özelliklerine endekslerle erişemezsiniz, bu nedenle, bir ... in anahtarını kullanarak anahtar (lar) ı almanız gerekir. – Xenethyl

+0

@Xenethyl Teşekkür ederim. – Radu

8

Bu aradığınız şey bu:

İşte benim WebMethod ana hatları vardır?

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

İpucu: JavaScript nesneleri JSON nesnelerini arama. JSON taşıma formatıdır. Ayrıştırıldıktan sonra JSON yoktur. –

+1

İpucu2: Birden çok değeri uyarmanın daha kısa bir yolu: 'uyarı ([anahtar, değer])' –

+1

@Ates Goral Var adındaki bir imaım, JSON verisi içermesiydi, bir JSON nesnesi olmamasıydı. Zavallı seçim, sanırım. – Xenethyl

2

, Hala anahtar adını kullanan kelime "b" kullanarak.

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

Aşağıdaki snippet'e bakın.

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

Sonucu olurdu

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

o son satır gösterilmesini istemiyor musunuz? kod aşağıdaki deneyin: Bu konsolda gösterilmesini Object {color1: “Gray”, color2: “Black”, color3: “Blue”} ortadan kaldıracaktır

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

.

Şimdi dizi değerini almak için infoJSON değişkenini yinelemeliyiz. Aşağıdaki bütün barış hukuku bak.

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

Ve şimdi

Bhaumik 
Mehta 
Gray 
Black 
Blue 

biz anahtar adı veya kimliği kullanmıyor o zaman JSON nesneden değerleri almak çok kolay ama burada biz anahtar kullanmadan değerlerimizi alıyorsanız olarak sonuç var ad veya kimlik.

1

Aynısını elde etmek için döngü için kullanın.

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

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