Я работаю над этим часами, читая статьи stackoverflow, но я не могу понять это. Я пытаюсь прочитать информацию из файла .json в массив. Файл .json имеет один ключ отображается в огромный массив значений JSON ... Вот код:Как читать файл JSON?
JSON файл:
{
"SDpairs":
[{"SD Pair":"Afghanistan -
Azerbaijan","Source":"Afghanistan","Dest":"Algeria","Flow":5,"Capacity":16},
{"SD Pair":"Afghanistan -
Azerbaijan","Source":"Afghanistan","Dest":"Australia","Flow":3,"Capacity":3},
{"SD Pair":"Afghanistan - Azerbaijan","Source":"Afghanistan","Dest":"Austria","Flow":12,"Capacity":12},
{"SD Pair":"Afghanistan - Azerbaijan","Source":"Afghanistan","Dest":"Belgium","Flow":3,"Capacity":10},
и т.д ...
методJavaScript:
$.getJSON("SDpairs.json", function(data) {
var str = JSON.stringify(data);
var json = JSON.parse(str);
console.log(json);
console.log("Type of 'json': " + typeof json);
for (var edge in json["SDpairs"]) {
console.log(json["SDPairs"][edge]);
console.log("Type of 'edge': " + typeof edge);
if (currPair == null) {
// If it is the first JSON to be read
currPair = [];
currPair.push(edge);
} else if (edge['SD Pair'] == currPair[0]['SD Pair']) {
// If the JSON is part of the same SD pair as currPair, push into currPair
currPair.push(edge);
} else {
// If it is a new SDpair as compared to currPair
sdPairs.push(currPair);
currPair = [];
currPair.push(edge);
}
}
}
EDIT:
Ошибки:
Uncaught TypeError: Cannot read property '0' of undefinedinitData @
database.js:67(anonymous function) @ index.html:31
database.js:10 Object
database.js:11 Type of 'json': object
database.js:14 Uncaught TypeError: Cannot read property '0' of
undefined(anonymous function) @ database.js:14f.Callbacks.o @
jquery.min.js:2f.Callbacks.p.fireWith @ jquery.min.js:2w @
jquery.min.js:4f.support.ajax.f.ajaxTransport.c.send.d @ jquery.min.js:4
Update # 1:
var sdPairs = [];
var initData = function() {
var currPair = [];
// Create and push arrays of JSONs into sdPairs.
// Each array contains edges from the same SD Pair
$.getJSON("SDpairs.json", function(data) {
var num = 0;
for (var element in data["SDpairs"]) {
var edge = data["SDpairs"][element];
if (currPair.length == 0) {
// If it is the first JSON to be read
currPair.push(edge);
} else if (edge['SD Pair'] == currPair[0]['SD Pair']) {
// If the JSON is part of the same SD pair as currPair, push into currPair
currPair.push(edge);
} else {
// If it is a new SDpair as compared to currPair
sdPairs.push(currPair);
currPair = [];
currPair.push(edge);
}
if (num == 0) {
console.log("Edge is " + edge);
console.log("edge['SD Pair'] is " + edge['SD Pair']);
}
num++;
}
sdPairs.push(currPair);
});
console.log(sdPairs.length);
console.log(currPair.length);
}
Вам не нужно называть 'JSON.stringify' и' JSON.parse'. '$ .getJSON' анализирует JSON для вас. – Barmar
Пожалуйста, добавьте ошибку (+ callstack), которую вы получаете. Также вы можете опубликовать весь файл JSON, чтобы убедиться, что он действителен. – Reinard
Вы сказали, что хотите, и показали нам какой-то код ... но вы не сказали, в чем проблема. Какое поведение вы ожидаете и как это отличается от того, что вы получаете? Как вы это тестируете? – Quentin