json - 解析 jsonData 以获取图形
问题描述
我正在做一个项目,我必须使用下拉菜单显示 2 个不同的图表。2 个不同的图表是: - 实时数据 - json 导入数据
我完成了第一个,并且完成了更改显示的下拉菜单。但我不知道如何导入 jsonData 并绘制它。我对 javascript、react 和 json 很陌生。我的队友告诉我当前的 jsonData 文件看起来像这样
{
"data": [
{"datetime": "", "data": [1,2,3,4]},
{"datetime": "", "data": [1,2,3,4]}
]
}
我不明白格式。
构造函数看起来
this.state = {
data: [],
jsonData: [1,2,3,4]
}
他给了我一个关于代码的提示:
// parse jsonData and set this.state.jsonData to the formated version of the jsonData
我不明白发生了什么事。我很感激任何帮助!
我不是 stackoverflow 的常客,所以如果我能做些什么来让我的帖子变得更好,请告诉我!
下面是Graph.js
绘制图表的:
import React, { Component } from 'react';
import Highcharts from 'highcharts';
import socketIOClient from "socket.io-client";
import {
HighchartsChart, Chart, withHighcharts, XAxis, YAxis, Title, Legend, LineSeries
} from 'react-jsx-highcharts';
import './Graph.css'
//import jsonData from '../jsonData.json';
var jsonData = require('../jsonData.json')
class Graph extends Component {
constructor (props) {
super(props);
this.addDataPoint = this.addDataPoint.bind(this);
this.handleChange = this.handleChange.bind(this);
const now = Date.now();
this.state = {
data: [],
jsonData: [1,2,3,4]
}
}
componentDidMount() {
// parse jsonData and set this.state.jsonData to the formated version of the jsonData
console.log(jsonData)
var sensorSerial = this.props.match.params.sensorId
const socket = socketIOClient("http://localhost:5001/test");
socket.on("newnumber", data => this.addDataPoint(data));
}
handleChange(event) {
this.setState({value: event.target.value});
}
addDataPoint(data){
console.log(data)
if(data.sensorSerial == this.props.match.params.sensorId){
var newData = this.state.data.slice(0)
console.log(new Date(data.dateTime.split(' ').join('T')))
//console.log(data.dateTime)
newData.push([new Date(data.dateTime.split(' ').join('T')), data.number])
// if(newData.length > 50){
// newData.shift()
// }
this.setState({
data: newData
})
}
}
handleChange(event){
this.setState({value: event.target.value});
}
render() {
console.log("calling render()")
var data = this.state.data
if(this.state.value === 'processed'){
var data = this.state.jsonData
}
const plotOptions = {
series: {
pointStart: new Date("2019-04-04T10:55:08.841287Z")
}
}
return (
<div className="container">
<div className="graph">
<HighchartsChart plotOptions={plotOptions}>
<Chart />
<Title>Sensor Data</Title>
<Legend layout="vertical" align="right" verticalAlign="middle" >
<Legend.Title>Legend</Legend.Title>
</Legend>
<XAxis type="datetime">
<XAxis.Title>Time</XAxis.Title>
</XAxis>
<YAxis>
<YAxis.Title>Y-axis</YAxis.Title>
<LineSeries name="Channel 1" data={data}/>
</YAxis>
</HighchartsChart>
</div>
<div className="side">
<div className="SideContainer">
<div className="upSide">
<h4>Information</h4>
<ul>
<li>Device: <b>Light Absorbtion</b></li>
<li>Status: <b>Connected</b></li>
<li>Packets: <b>1021/1220</b></li>
</ul>
</div>
<div className="downSide">
<form>
<label>
<h4>Options</h4>
<select value={this.state.value} onChange={this.handleChange}>
<option value="live">Live</option>
<option value="raw">Raw</option>
<option value="processed">Processed</option>
</select>
</label>
</form>
<form>
<label>
<h4>Channel</h4>
<select value={this.state.value} onChange={this.handleChange}>
<option value="20">20</option>
<option value="40">40</option>
<option value="80">80</option>
</select>
</label>
</form>
<form>
<label>
<h4>Graph View</h4>
<select value={this.state.value} onChange={this.handleChange}>
<option value="map">Map</option>
<option value="timeseries">Time Series</option>
</select>
</label>
</form>
</div>
</div>
</div>
</div>
);
}
}
export default withHighcharts(Graph, Highcharts);
解决方案
推荐阅读
- reactjs - 从源代码创建 aws Amplify 应用程序
- hibernate - 如何在 JPA Hibernate 中防止同一表父子关系中的循环
- javascript - 如何通过属性实时更改元素的innerHTML或innerText
- jenkins - 如何解决由于 WebdriverIO5 中缺少配置错误而无法执行“运行”
- mongodb - 所选数组值的 Mongodb 聚合平均值
- python - 我想保存我通过我的代码从用户那里得到的回复,所以我该怎么做
- powerbi - DAX 尝试创建按大陆过滤国家/地区的度量
- php - 在 Xdebug 中调试时 __DIR__ 未正确解析
- javascript - 在 .NET CORE 的部分视图中使用 Modal JavaScript 在 Ajax Post 之后将不起作用
- javascript - Lazyload:如何处理互联网连接丢失?