Отображение данных JSON в гистограмму Chart.js в React
Может ли кто-нибудь помочь мне в получении правильных данных из файла JSON в Bartart Chart.js. Я могу получить доступ к файлу JSON, и он работает нормально. Кажется, у меня проблема с отображением правильной JSON-иерархии / объекта для меток, наборов данных и параметров Chart.js. Я попробовал JSONdata.barchart.labels.map для меток без посторонней помощи.
Компонент React:
import React from "react";
import Layout from "./Layout";
import { Grid, Header, Statistic } from "semantic-ui-react";
import JSONdata from "../data/DashboardData.json";
import { Bar } from "react-chartjs-2";
const DashboardBarChart = () => {
const data = {
labels: [JSONdata.barChart.map(item => item.labels)],
datasets: [JSONdata.barChart.map(item => item.datasets)],
options: [JSONdata.barChart.map(item => item.options)]
};
return <Bar data={data} />;
};
export default class Dashboard extends React.PureComponent {
renderDashboardStatistics = () => {
return JSONdata.statistics.map(item => {
return (
<Statistic key={item.id}>
<Statistic.Value>{item.value}</Statistic.Value>
<Statistic.Label>{item.id}</Statistic.Label>
</Statistic>
);
});
};
render() {
return (
<Layout {...this.props}>
<Header as="h2">Dashboard</Header>
<Grid stackable>
<Grid.Row>
<Grid.Column width={16}>
<Header as="h4" dividing>
Monthly users
</Header>
<DashboardBarChart />
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column width={16}>
<Header as="h4" dividing>
Statistics
</Header>
<Statistic.Group size="small">
{this.renderDashboardStatistics()}
</Statistic.Group>
</Grid.Column>
</Grid.Row>
</Grid>
</Layout>
);
}
}
Файл JSON:
{
"barChart": [
{
"labels": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
},
{
"datasets": [
{
"label": "Monthly users",
"backgroundColor": "rgba(255,99,132,0.2)",
"borderColor": "rgba(255,99,132,1)",
"borderWidth": 1,
"hoverBackgroundColor": "rgba(255,99,132,0.4)",
"hoverBorderColor": "rgba(255,99,132,1)",
"data": [65, 59, 80, 81, 56, 55, 40, 65, 59, 80, 81, 56]
}
]
},
{
"options": {
"scales": {
"yAxes": [
{
"ticks": {
"beginAtZero": true
}
}
]
},
"layout": {
"padding": {
"left": 0,
"right": 0,
"top": 0,
"bottom": 0
}
},
"legend": {
"display": false
}
}
}
],
1 ответ
Решение
Я не уверен, что на диаграммах требуется структура данных, но я думаю, что вы можете удалить квадратные скобки вокруг JSONdata
и map
; вместо этого просто получить доступ к свойствам напрямую, например
labels: JSONdata.barChart[0].labels,
datasets: JSONdata.barChart[1].datasets,
options: JSONdata.barChart[2].options