2015-02-08 2 views
0

У меня есть этот объект JSON, и я хочу проанализировать его с помощью javascript. Я могу получить B, A и 208, но у меня возникают проблемы с получением данных со времен.Как восстановить элементы Subarray в JSON с помощью Javascript?

{ 
"room":[ 
    {"campusName":"B", 
    "buildingCode":"A", 
    "roomNumber":"208", 
    "times":[ 
      "7-8", "9-10" 
    ] 
    } 
] 
} 

$(document).ready(function(){ 
    $.getJSON("data.json", function(data){ 
    $.each(data.room, function(data){ 
     $("ul").append("<li>campus: "+this['campusName']+"</li><li>building: "+this['buildingCode']+"</li>"); 
     $.each(data.times, function(){ 
      $("ul").append("<li>stuff: "+this['times']+"</li>") 
     }); 
    }); 
    }); 
}); 
+3

Не должен ли ваш массив времени не содержать объект и просто строки, а именно: '" times ": [" 7-8 "," 9-10 "]'? Тогда это будет ваше значение –

+0

Это недействительно JSON as-written – zzzzBov

+0

Это действительно запутанно использовать одно и то же имя переменной 'data' как в' $ .getJSON', так и '$ .each'. – Barmar

ответ

0

Попробуйте следующий код для вашего JSON

var data = { 
"room":[ 
    {"campusName":"B", 
    "buildingCode":"A", 
    "roomNumber":"208", 
    "times":[ 
      "7-8", "9-10" 
    ] 
    } 
] 
} 

Затем вы можете использовать следующие, чтобы получить ваши результаты желание:

data.room[0].campusName; // ==> B 
data.room[0].buildingCode; // ==> A 
data.room[0].roomNumber; // ==> 208 
data.room[0].times; // ==> ["7-8", "9-10"] 

EDIT2:

$.each(data.room, function(i) { 
    console.log(data.room[i].campusName); 
    console.log(data.room[i].buildingCode); 
    console.log(data.room[i].roomNumber); 
    console.log(data.room[i].times); 
}); 

ВЫВОД

B 
A 
208 
["7-8", "9-10"] 

EDIT1:

Для получения более подробной информации посетите JSON syntax и как получить к нему доступ.

+0

Спасибо за помощь! – minionhacking

+0

В чем разница между этим и JSON в его вопросе? – Barmar

+0

Это то же самое, я просто сохранил его в переменной 'data', поэтому я его написал. Ничего больше... –

0

Элементы data.times являются просто строки, а не объекты, поэтому вы не должны их индексировать. Это должно быть просто:

$.each(data.times, function() { 
    $("ul").append("<li>stuff: " + this + "</li>"); 
}); 

Кроме того, список аргументов в первом $.each() обратного вызова неправильно. Он должен быть function(i, data) - первым аргументом является индекс массива (или имя объекта объекта, если вы выполняете итерацию над объектом), вторым аргументом является значение.

var data = { 
 
    "room": [{ 
 
    "campusName": "B", 
 
    "buildingCode": "A", 
 
    "roomNumber": "208", 
 
    "times": [ 
 
     "7-8", "9-10" 
 
    ] 
 
    }] 
 
}; 
 

 
$.each(data.room, function(i, data) { 
 
    $("ul").append("<li>campus: " + this['campusName'] + "</li><li>building: " + this['buildingCode'] + "</li>"); 
 
    $.each(data.times, function() { 
 
    $("ul").append("<li>stuff: " + this + "</li>"); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul></ul>

+0

Я пробовал это и все еще только получил B и A – minionhacking

+0

проблема была в вашем списке аргументов внешней итерационной функции. См. Обновленный ответ. – Barmar

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