2011-02-25 2 views
15

Вот мой JSON:доступа к элементам объекта JSON, не зная ключевые имена

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

Есть ли способ доступа ключи и значения (в JavaScript) в этом массиве, не зная, что ключи?

Причина, по которой мой json структурирован так, что веб-метод, который я вызываю через jquery, возвращает словарь. Если с этим невозможно работать, что мне нужно изменить в отношении того, как я возвращаю данные?

Вот набросок моего 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

* "доступа к ключам и значения (в JavaScript) в этом массиве" * - что массив ..? –

ответ

41

Вы можете использовать for..in конструкцию для перебора произвольных свойств вашего объекта:

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

Perfect.Должен ли я использовать 'for in', если есть только одна пара значений ключа? – Radu

+0

@Radu Вы не можете получить доступ к свойствам объекта с индексами, поэтому вам нужно будет получить ключ (ы), используя для ... in. – Xenethyl

+0

@ Xenethyl Спасибо. – Radu

8

Это то, что вы ищете?

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

Совет. Не вызывайте объекты JSON объектов JavaScript. JSON - это транспортный формат. После разбора нет JSON. –

+1

Tip2: более краткий способ оповещения о нескольких значениях: 'alert ([key, value])' –

+1

@Ates Goral. Я имел в виду, что имя 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”} от показа в консоли.

Теперь нам нужно перебрать переменную infoJSON, чтобы получить значение массива. Посмотрите на следующий весь мир кода.

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

Смежные вопросы