如何按对象获取JSON数据?

时间:2018-12-27 14:38:07

标签: javascript json vue.js vuejs2

我有一个很大的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不起作用,我认为它需要索引,但无法在获取中进行。

3 个答案:

答案 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);
    });