2011-02-25 15 views
15

Ecco il mio JSON:Accesso elementi di oggetto JSON senza conoscere i nomi chiave

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

C'è un modo di accesso alle chiavi e valori (in javascript) in questo array senza sapere quali sono le chiavi?

Il motivo per cui il mio json è strutturato in questo modo è che il metodo web che sto chiamando tramite jquery restituisce un dizionario. Se è impossibile lavorare con quanto sopra, cosa devo cambiare nel modo in cui sto restituendo i dati?

Ecco un profilo del mio webmethod:

<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

* "l'accesso alle chiavi e valori (in javascript) in questo array" * - cosa serie ..? –

risposta

41

È possibile utilizzare il for..in costrutto per scorrere le proprietà arbitrarie del vostro oggetto:

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

Perfetto.Devo ancora usare un 'for in' se c'è una sola coppia di valori chiave? – Radu

+0

@Radu Non è possibile accedere alle proprietà di un oggetto con indici, quindi è necessario ottenere la chiave (o le chiavi) utilizzando un per ... in. – Xenethyl

+0

@ Xenethyl Grazie. – Radu

8

E 'questo quello che stai cercando?

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

Suggerimento: non chiamare oggetti JSON di oggetti JavaScript. JSON è il formato di trasporto. Una volta analizzato, non c'è JSON. –

+1

Suggerimento2: un modo più conciso per avvisare più valori: 'alert ([chiave, valore])' –

+1

@Ates Goral La mia implicazione con il nome var era che conteneva i dati JSON, non che si trattasse di un oggetto JSON. Scarsa scelta, suppongo. – Xenethyl

2

Utilizzando parola "b", si sta ancora utilizzando il nome della chiave.

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

sguardo al frammento di sotto.

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

risultato sarebbe,

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

non vogliamo che l'ultima linea di presentarsi? Prova seguente codice:

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

Questo eliminerà Object {color1: “Gray”, color2: “Black”, color3: “Blue”} da presentarsi nella console.

Ora abbiamo bisogno di scorrere la variabile infoJSON per ottenere il valore dell'array. Guarda la seguente completa pace del codice.

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

E ora abbiamo ottenuto il risultato come

Bhaumik 
Mehta 
Gray 
Black 
Blue 

Se usiamo nome di chiave o ID allora è molto facile da ottenere i valori dalla oggetto JSON ma qui stiamo ottenendo i nostri valori senza usare chiave nome o id.

1

Utilizzare per il ciclo per ottenere lo stesso risultato.

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

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

Problemi correlati