echarts讀取JSON文件并畫圖完整代碼
1. 創(chuàng)建一個(gè)文件選擇器
<input type="file" id="files" value="選文件"/>
<script>
var inputElement = document.getElementById("files");
inputElement.addEventListener("change", handleFiles, false);
function handleFiles() {
var selectedFile = document.getElementById("files").files[0];//獲取讀取的File對(duì)象
var reader = new FileReader();//讀取操作就是由它完成的。
reader.readAsText(selectedFile);//讀取文件的內(nèi)容
reader.onload = function(){
console.log("讀取結(jié)果:", this.result);//當(dāng)讀取完成之后會(huì)回調(diào)這個(gè)函數(shù),然后此時(shí)文件的內(nèi)容存儲(chǔ)到了result中。直接操作即可。
};
}文件選擇器能夠選擇并讀取本設(shè)備的文件。
2. 選擇JSON文件
JSON文件中的內(nèi)容如下所示,文件中的引號(hào)必須為雙引號(hào),否則會(huì)報(bào)錯(cuò):
{
"Matcha Latte": {
"2015": 43.3,
"2016": 85.8,
"2017": 93.7
},
"Cheese Cocoa": {
"2015": 86.4,
"2016": 65.2,
"2017": 82.5
},
"Milk Tea": {
"2015": 83.1,
"2016": 73.4,
"2017": 55.1
},
"Walnut Brownie": {
"2015": 72.4,
"2016": 53.9,
"2017": 39.1
}
}3. 數(shù)據(jù)處理
我們需要用讀入的數(shù)據(jù)來(lái)在echarts上進(jìn)行繪圖,又因?yàn)閑charts接收的數(shù)據(jù)的類型是數(shù)組類型,所以我們需要將讀入的數(shù)據(jù)轉(zhuǎn)為數(shù)組類型的數(shù)據(jù)才能將其直接傳入echarts中。
//this.result是讀入的JSON文件的數(shù)據(jù),讀出的數(shù)據(jù)時(shí)對(duì)象類型,要轉(zhuǎn)為數(shù)組才行
let json = JSON.parse(this.result);
//echarts開頭必須添加每一列的名字
list = [['Product','2015','2016','2017']];
//得到j(luò)son文件中的所有鍵
json_key = Object.keys(json);
for(let i = 0;i < json_key.length;i++){
//將每一行數(shù)據(jù)拼接成數(shù)組
list_i = [json_key[i]].concat(Object.values(json[json_key[i]]))
list.push(list_i)
}4. 傳入數(shù)據(jù)開始畫圖
<div id="main" style="width: 1000px;height:500px;"></div>
function draw(list){
// 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
var myChart = echarts.init(document.getElementById('main'));
console.log(list)
//瀏覽器寬度改變的時(shí)候,始終保持圖表寬度是頁(yè)面的 100%。
window.onresize = function() {
myChart.resize();
};
// 指定圖表的配置項(xiàng)和數(shù)據(jù)
var option = {
legend: {},
tooltip: {},
toolbox: {
feature: {
//圖片下載功能
saveAsImage: {
type: 'png',
name: 'test1',
backgroundColor: 'auto',
show: true,
title: true,
},
},
},
dataset: {
// 默認(rèn)把第一個(gè)維度映射到 X 軸上,后面維度映射到 Y 軸上。
source: list
},
xAxis: {
//是否顯示
show: true,
},
//指定y軸為類目軸,參數(shù)默認(rèn)'value'
yAxis: {type: 'category'},
series: [{ type: 'bar' }],
series: [
{
type: 'bar',
//設(shè)定x軸顯示的數(shù)據(jù),y軸顯示的數(shù)據(jù)
encode: {
x: '2015',
y: 'product',
},
},
{
type: 'bar',
encode: {
x: '2016',
y: 'product',
},
},{
type: 'bar',
encode: {
x: '2017',
y: 'product',
},
},
]
};
myChart.setOption(option);
}5. 結(jié)果展示

6. 完整代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="./JS/echarts.js"></script>
<title>Document</title>
</head>
<body>
<input type="file" id="files" value="選文件"/>
<div id="main" style="width: 600px;height:400px;"></div>
<script>
var inputElement = document.getElementById("files");
inputElement.addEventListener("change", handleFiles, false);
function handleFiles() {
var selectedFile = document.getElementById("files").files[0];//獲取讀取的File對(duì)象
var reader = new FileReader();//這里是核心?。?!讀取操作就是由它完成的。
reader.readAsText(selectedFile);//讀取文件的內(nèi)容
reader.onload = function(){
console.log("讀取結(jié)果:", this.result);//當(dāng)讀取完成之后會(huì)回調(diào)這個(gè)函數(shù),然后此時(shí)文件的內(nèi)容存儲(chǔ)到了result中。直接操作即可。
let json = JSON.parse(this.result);
list = [['Product','2015','2016','2017']];
json_key = Object.keys(json);
for(let i = 0;i < json_key.length;i++){
list_i = [json_key[i]].concat(Object.values(json[json_key[i]]))
list.push(list_i)
}
draw(list)
};
}
function draw(list){
// 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
var myChart = echarts.init(document.getElementById('main'));
console.log(list)
//瀏覽器寬度改變的時(shí)候,始終保持圖表寬度是頁(yè)面的 100%。
window.onresize = function() {
myChart.resize();
};
// 指定圖表的配置項(xiàng)和數(shù)據(jù)
var option = {
legend: {},
tooltip: {},
toolbox: {
feature: {
//圖片下載功能
saveAsImage: {
type: 'png',
name: 'test1',
backgroundColor: 'auto',
},
},
},
dataset: {
// 默認(rèn)把第一個(gè)維度映射到 X 軸上,后面維度映射到 Y 軸上。
source: list
},
xAxis: {
//是否顯示
show: true,
},
//指定y軸為類目軸,參數(shù)默認(rèn)'value'
yAxis: {type: 'category'},
series: [
{
type: 'bar',
//設(shè)定x軸顯示的數(shù)據(jù),y軸顯示的數(shù)據(jù)
encode: {
x: '2015',
y: 'product',
},
},
{
type: 'bar',
encode: {
x: '2016',
y: 'product',
},
},{
type: 'bar',
encode: {
x: '2017',
y: 'product',
},
},
]
};
myChart.setOption(option);
}
</script>
</body>
</html>總結(jié)
到此這篇關(guān)于echarts讀取JSON文件并畫圖的文章就介紹到這了,更多相關(guān)echarts讀取JSON文件畫圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Javascript在HTML中顯示實(shí)時(shí)時(shí)間
這篇文章主要為大家詳細(xì)介紹了使用Javascript在HTML中顯示實(shí)時(shí)時(shí)間,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
Bootstrap框架結(jié)合jQuery仿百度換膚功能實(shí)例解析
這篇文章主要為大家詳細(xì)介紹了Bootstrap框架結(jié)合jQuery仿百度換膚功能實(shí)現(xiàn)代碼解析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
JavaScript中使用typeof運(yùn)算符需要注意的幾個(gè)坑
這篇文章主要介紹了JavaScript中使用typeof運(yùn)算符需要注意的幾個(gè)坑,本文總結(jié)了4個(gè)使用typeof運(yùn)算符要注意的問(wèn)題,需要的朋友可以參考下2014-11-11
Next.js路由組使用之組織路由結(jié)構(gòu)示例詳解
這篇文章主要為大家介紹了Next.js路由組使用之組織路由結(jié)構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果
頁(yè)面平滑滾動(dòng)是網(wǎng)頁(yè)一種常見的效果,平滑滾動(dòng)的原理其實(shí)很簡(jiǎn)單,無(wú)非就是讓頁(yè)面一種肉眼可見的速度從當(dāng)前位置滾動(dòng)到指定位置,那如何用原生的JS實(shí)現(xiàn)這也效果呢?本文給大家介紹了JavaScript實(shí)現(xiàn)平滑滾動(dòng)效果,需要的朋友可以參考下2024-06-06
js實(shí)現(xiàn)匹配時(shí)換色的輸入提示特效代碼
這篇文章主要介紹了js實(shí)現(xiàn)匹配時(shí)換色的輸入提示特效代碼,涉及javascript針對(duì)頁(yè)面元素的匹配及鼠標(biāo)事件的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
JavaScript倒計(jì)時(shí)定時(shí)器和間隔定時(shí)器使用詳解
這篇文章主要為大家介紹了JavaScript倒計(jì)時(shí)定時(shí)器和間隔定時(shí)器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-05-05
關(guān)于uniApp editor微信滑動(dòng)問(wèn)題
這篇文章主要介紹了關(guān)于uniApp editor微信滑動(dòng)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01

