Как получить объект данных JSON за объектом?

1

У меня есть большой файл JSON (40 МБ), который содержит информацию о странах, их идентификаторах и, наконец, сумму, которая мне нужна, чтобы получить ее общее количество.

{
        "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
    «Когда я пытаюсь извлечь эти данные в переменную, она работает хорошо, но потребляет так много памяти». Я думаю, вы должны это сделать из бэкэнда.
  • 0
    Делать суммирование на стороне сервера.
Показать ещё 5 комментариев
Теги:
vue.js
vuejs2

3 ответа

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);
        });
  • 0
    Это имеет смысл, и это на самом деле решение для меня, спасибо.
1

Я не уверен, что полностью понимаю, что вы хотите сделать: либо получите массив только со свойством sum потому что ваш responseJSON слишком большой, либо получите фактическую сумму всех переменных sum.

Вот часть кода, которая может помочь:

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

В этой части кода я использую функцию отображения javascript, чтобы получить массив со всеми переменными sum в нем. Я также делаю общую sum переменных sum с totalSum переменной totalSum.

Если вам просто нужно получить общую сумму переменных sum, я бы рекомендовал использовать forEach javascript forEach а не функцию map.

Надеюсь, это может помочь...

  • 0
    То, что вы сделали, это именно то, что я хочу сделать, но я пытаюсь сделать это при получении JSON
1

Вы можете сделать это просто используя reduce функцию следующим образом

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

пример

let arr = {
  "0": {
    "id": 0,
    "country": "usa",
    "sum": 201,
  },
  "1": {
    "id": 1,
    "country": "fr",
    "sum": 133,

  }
}

const reducer = (accumulator, currentValue) => accumulator.sum + currentValue.sum;
let sum = Object.values(arr).reduce(reducer);

console.log(sum)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню