我已经工作了几个小时,阅读stackoverflow文章,但我无法弄明白。我试图将.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);
}
}
}
编辑:
错误:
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
更新#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);
}
答案 0 :(得分:1)
看起来你没有得到正确的输出,原因有两个。您只是在for..in
循环中比较键(而不是它们的值)。退出循环时,您还会丢失最后处理的对象集。你应该在最后添加它。
var sdPairs=[], currPair; // Remember to declare the variables you're using somewhere
for(var name in json["SDpairs"]) {
var edge = json["SDpairs"][name];
// The rest of your code
}
sdPairs.push(currPair);
console.log(sdPairs); // Do something with sdPairs now