Подтвердить что ты не робот

Анализ JSON-ответа в Javascript для получения пары ключ/значение

Возможный дубликат:
У меня есть вложенная структура данных/как я могу получить доступ к определенному значению?

Как я могу получить имя и значение каждого объекта только в Javascript?

4b9b3361

Ответ 1

Существует два способа доступа к свойствам объектов:

var obj = {a: 'foo', b: 'bar'};

obj.a //foo
obj['b'] //bar

Или, если вам нужно динамически это сделать:

var key = 'b';
obj[key] //bar

Если у вас еще нет объекта как объекта, вам нужно конвертировать его.

Для более сложного примера предположим, что у вас есть массив объектов, представляющих пользователей:

var users = [{name: 'Corbin', age: 20, favoriteFoods: ['ice cream', 'pizza']},
             {name: 'John', age: 25, favoriteFoods: ['ice cream', 'skittle']}];

Чтобы получить доступ к возрастному свойству второго пользователя, вы должны использовать users[1].age. Чтобы получить доступ ко второму "favoriteFood" первого пользователя, вы должны использовать users[0].favoriteFoods[2].

Другой пример: obj[2].key[3]["some key"]

Это будет доступ к 3-му элементу массива с именем 2. Затем он будет обращаться к "ключу" в этом массиве, перейти к третьему элементу этого и затем получить доступ к имени свойства some key.


Как отметил Амадан, стоит также обсудить, как перебирать разные структуры.

Чтобы перебрать массив, вы можете использовать простой цикл:

var arr = ['a', 'b', 'c'],
    i;
for (i = 0; i < arr.length; ++i) {
    console.log(arr[i]);
}

Чтобы перебрать объект над контуром, это немного сложнее. В случае, если вы абсолютно уверены, что объект является простым объектом, вы можете использовать простой цикл for (x in obj) { }, но гораздо безопаснее добавить в hasOwnProperty. Это необходимо в ситуациях, когда вы не можете проверить, что объект не имеет унаследованных свойств. (Это также в будущем немного улучшит код.)

var user = {name: 'Corbin', age: 20, location: 'USA'},
    key;

for (key in user) {
    if (user.hasOwnProperty(key)) {
        console.log(key + " = " + user[key]);
    }
}    

(Обратите внимание, что я предполагал, что вся используемая вами реализация JS имеет console.log. Если нет, вы можете использовать alert или какую-либо манипуляцию DOM вместо.)

Ответ 2

Попробуйте JSON Parser от Douglas Crockford в github. Затем вы можете просто создать объект JSON из своей переменной String, как показано ниже:

var JSONText = '{"c":{"a":[{"name":"cable - black","value":2},{"name":"case","value":2}]},"o":{"v":[{"name":"over the ear headphones - white/purple","value":1}]},"l":{"e":[{"name":"lens cleaner","value":1}]},"h":{"d":[{"name":"hdmi cable","value":1},{"name":"hdtv essentials (hdtv cable setup)","value":1},{"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]}'

var JSONObject = JSON.parse(JSONText);
var c = JSONObject["c"];
var o = JSONObject["o"];

Ответ 3

Хорошо, вот код JS:

var data = JSON.parse('{"c":{"a":{"name":"cable - black","value":2}}}')

for (var event in data) {
    var dataCopy = data[event];
    for (data in dataCopy) {
        var mainData = dataCopy[data];
        for (key in mainData) {
            if (key.match(/name|value/)) {
                alert('key : ' + key + ':: value : ' + mainData[key])
            }
        }
    }
}​

FIDDLE ЗДЕСЬ

Ответ 4

var yourobj={
"c":{
    "a":[{"name":"cable - black","value":2},{"name":"case","value":2}]
    },
"o":{
    "v":[{"name":"over the ear headphones - white/purple","value":1}]
},
"l":{
    "e":[{"name":"lens cleaner","value":1}]
},
"h":{
    "d":[{"name":"hdmi cable","value":1},
         {"name":"hdtv essentials (hdtv cable setup)","value":1},
         {"name":"hd dvd \u0026 blue-ray disc lens cleaner","value":1}]
}}
  • Прежде всего, это хорошая идея организовать организованный
  • Ссылка на верхний уровень должна быть более удобным именем, другим, что a..v... и т.д.
  • в o.v, o.i.e нет необходимости в массиве [], потому что это одна запись json

мое решение

var obj = [];
for(n1 in yourjson)
    for(n1_1 in yourjson[n])
        for(n1_2 in yourjson[n][n1_1])
            obj[n1_2[name]] = n1_2[value];

Утвержденный код

for(n1 in yourobj){
    for(n1_1 in yourobj[n1]){
    for(n1_2 in yourobj[n1][n1_1]){
            for(n1_3 in yourobj[n1][n1_1][n1_2]){
      obj[yourobj[n1][n1_1][n1_2].name]=yourobj[n1][n1_1][n1_2].value;
            }
    }
 }
}
console.log(obj);

результат

* Вы должны использовать различать accessorizes при использовании метода [] или точечной нотации

proove