Анализ значений из внешнего файла JSON с помощью Chart.js

Я создал простую круговую диаграмму, используя Chart.js. Я хочу связать это с файлом JSON на моем компьютере, который находится в той же локальной папке. Затем я хочу, чтобы данные из файла JSON отображались на моей круговой диаграмме, а не брались непосредственно из скрипта.

Как мне это сделать? Это мой код.

  <script>
    var ctx = document.getElementById("myDoughnutChart");
    var myDoughnutChart = new Chart(ctx, {
        type: 'doughnut',
            data: {
                labels: ["Blue", "Red", "Green", "Orange", "Light Blue"],
            datasets: [{
                backgroundColor: ["#0074D9", "#FF4136", "#2ECC40", "#FF851B", "#7FDBFF"],
                    data: [12, 19, 3, 5, 2],
                    }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                showAllTooltips: true,
                title: {
                    display: true,
                    text: "Responsive test"
                    },
                legend: {
                    display: false,
                    fullWidth: true,
                    labels: {
                    boxWidth: [50]
                    },
                }
            }
        });
    </script>

Это мой файл JSON, который хранится в «chart.json» - я не уверен, правильный ли это формат, поскольку я новичок в этом.

{"jsonarray": [{
    "Color": "Blue",
    "Value": 12}, 
    {
    "Color": "Red",
    "Value": 19}, 
    {
    "Color": "Green",
    "Value": 3}, 
    {
    "Color": "Orange",
    "Value": 5}, 
    {
    "Color": "Light Blue",
    "Value": 2}]
};

Я понимаю, что нужно проанализировать файл JSON, но понятия не имею, как это сделать - заранее большое спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 898
2

Ответы 2

Файлы json в большинстве своем представляют собой строковый тип времени, поэтому диаграмма, которую вы хотите сгенерировать, я думаю, ей нужен своего рода числовой тип, поэтому вам нужно преобразовать данные JSON в числовое время. проверьте здесь, если вы правильно выполните синтаксический анализ JSON, проверьте здесь, как он уже ответил, все будет в порядке.

Здесь есть пара частей.

Шаг первый: загрузите JSON из файла

Мне нравится использовать Принести. Если вы используете jQuery, вы также можете использовать $ .ajax. Предполагая, что файл находится в том же каталоге, что и ваш JS-код, и называется chart.json:

  fetch('./chart.json')
    .then(function (response) {
      return response.json();
    }).then(function (json) {
      // drawChart fn to be created...see below
      drawChart(json);
    }).catch(function (error) {
      console.error(error);
    });

Обратите внимание: если вы запускаете этот код локально, вы, вероятно, получите сообщение об ошибке CORS, если попытаетесь посетить веб-сайт непосредственно из файловой системы (например, file:///<path-to-file>/index.html).

Вместо этого вы можете легко запустить локальный сервер. Перейдите в каталог, содержащий ваш файл в вашем терминале, и запустите:

python -m SimpleHTTPServer 8000

или же

php -S localhost:8000

Это обслуживает текущий каталог на порту 8000. Затем посетите http: // локальный: 8000 /

Также убедитесь, что JSON действителен (без точки с запятой в конце!).

Шаг второй: проанализируйте ответ JSON

Мы пытаемся сделать два массива. Один с числами для данных и один со строками для меток.

Вы можете легко сделать это с помощью карта:

var graphData = json.jsonarray.map(e => e.Color);
// ["Blue", "Red", "Green", "Orange", "Light Blue"]
var graphLabels = json.jsonarray.map(e => e.Value);
// [12, 19, 3, 5, 2]

Шаг третий: соберите все вместе

window.addEventListener("DOMContentLoaded", draw);
function draw() {
  // Get the json file with fetch or $.ajax
  // Pass the json data to drawChart
}
function drawChart(jsonData) {
  /* get graphData and graphLabels
  draw chart with your existing code
  pass graphData and graphLabels in place of
  the hard-coded labels and data in your Chart initialization */
}

расширение идеи:

Сейчас этот код поддерживает только один набор данных. Массив backgroundColor является фиксированным, поэтому, если у вас нет ровно 5 значений, некоторые из цветов фона будут серыми по умолчанию для ChartJS.

Вы можете дополнительно абстрагироваться от кода чертежа для поддержки нескольких наборов данных и даже случайным образом генерировать цвета, соответствующие количеству групп, если вам это необходимо. Просто замените жестко запрограммированные значения при необходимости на переменные, которые вы генерируете из своего набора данных. Надеюсь, это поможет вам начать работу!

Большое спасибо за то, что нашли время разобрать это. Мой единственный вопрос: где в коде я ввожу переменные graphData и graphLabels? Я новичок в этом и имею минимальные знания JS, еще раз спасибо

stellaexp 16.07.2018 11:58

Вы можете заключить текущий код в функцию, которая принимает эти переменные, например функцию drawGraph (graphData, graphLabels) {// существующий код}. Затем в существующем коде замените жестко запрограммированные значения переданными переменными. Таким образом, данные: {label: ["Синий", "Красный", "Зеленый", "Оранжевый", "Голубой"] становятся данными: { label: graphLabels и такая же замена для данных.

thmsdnnr 16.07.2018 16:51

Другие вопросы по теме