我有一个很大的JSON文件(40 MB),其中包含有关国家/地区,其ID的信息,最后是我需要得到的总数。
{
"0": {
"id": 0,
"country": "usa",
"sum": 201,
},
"1": {
"id": 1,
"country": "fr",
"sum": 133,
}
}
当我尝试将这些数据提取到一个变量中时,它可以很好地工作,但是会占用大量内存,因此我想读取这些国家对象的唯一求和字段,然后计算总和。我该怎么办?
我正在使用以下代码来获取整个JSON:
fetch(fetchURL)
.then(response => response.json())
.then(responseJSON => {
this.json_data = responseJSON;
})
.catch(error => {
console.log(error);
});
responseJSON.sum不起作用,我认为它需要索引,但无法在获取中进行。
答案 0 :(得分:1)
我不确定是否要完全理解要执行的操作:要么因为您的sum
过大而只拥有responseJSON
属性的数组,要么获取所有{{ 1}}变量。
这部分代码可能会有所帮助:
sum
在这部分代码中,我使用javascript map函数获取其中包含所有var countries = [
{
"id": 0,
"country": "usa",
"sum": 201,
},
{
"id": 1,
"country": "fr",
"sum": 133,
}
];
var totalSum = 0;
var sumArray = countries.map(function(country) {
totalSum = totalSum + country.sum;
return country.sum;
});
变量的数组。我还将sum
变量与sum
变量的总和。
如果您只需要获取totalSum
变量的总和,我宁愿建议使用sum
javascript函数而不是forEach
函数。
希望这可能对您有帮助...
答案 1 :(得分:1)
在ES6中,您可以简单地执行以下操作:
fetch(fetchURL)
.then(response => response.json())
.then(responseJSON => {
var sum = 0;
for(var i = 0; i < Object.keys(responseJSON).length; i++) {
sum += responseJSON[i]['sum'];
}
console.log(sum); // This is the total sum
})
.catch(error => {
console.log(error);
});
答案 2 :(得分:1)
您可以简单地使用reduce
函数,如下所示
void Login_Btn(object sender, RoutedEventArgs e)
{
Application.Current.MainWindow.myTextBox.Visiblity = Visibility.Visible;
}
示例
fetch(fetchURL)
.then(response => response.json())
.then(responseJSON => {
const reducer = (accumulator, currentValue) => accumulator.sum + currentValue.sum;
let sum =Object.values(responseJSON).reduce(reducer);
})
.catch(error => {
console.log(error);
});