首先感谢Vam的金豆之路提供《【免费开源】2020年独家全球疫情大数据接口(实时获取)》,见https://blog.csdn.net/qq_39045645/article/details/104227764。
项目需求描述:
1.获取API后数据分析,是否可以直接调用?答案:否。
2.数据是否需要清洗?答案:是。
3.如何清洗获取的API数据?答案:如下。
首先JSON概念的的明确:
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"name" : "菜鸟教程"
JSON 对象
JSON 对象在大括号({})中书写,对象可以包含多个名称/值对:
{ "name":"菜鸟教程" , "url":"www.runoob.com" }
JSON 数组
JSON 数组在中括号中书写,数组可包含多个对象:
{ "sites": [ { "name":"菜鸟教程" , "url":"www.runoob.com" }, { "name":"google" , "url":"www.google.com" }, { "name":"微博" , "url":"www.weibo.com" } ] }
实际情况,我们都是在处理JSON数组,如果不是按照JSON标准格式来处理数据,会出现众多问题。这也是明确JSON概念的重要原因。
进入正文,下面是API数据处理的分解步骤:
一、用ajax获取数据源,并通过console.log查看数据:
//使用$.get(),必须http服务器支持,无法本地访问; $.get('https://www.maomin.club/fy/get/', function (res, status) { /*1.读取数据,查看数据格式,按照需求进行数据清洗处理;*/ console.log(res); })
为了提高效率,建议复制(copy)到自己熟悉的IDE中进行数据查看:
二、查看可知道,这是一组非标准的JSON数据,无法直接输出和调用,主要的问题集中在头部和尾部有描述性的代码。
头部代码:
var V = V || {};V.activity_name = "newpneumonia";V.page_name = "newpneumonia";V.template_name = "empty";V.page_id = "458";V.activity_id = "134";V.activity_id_list = ['134'];V.conf =
尾部代码:
;V.bsData = {"os": "android", "app": null, "appversion": null, "browser": "", "userInfo": {"isLogin": false}};V.extData = {"pvid": "1581823641475608395", "rqid": "1581823641475608395", "qid": "1581823641475608395", "psid": "0", "sid": "0", "baiduid": "ANONYMOUS", "fr": "self", "oq": "-", "q": "-", "cat": "newpneumonia_newpneumonia", "pid": 385};V.currentTime = 1581823641;V.bundles = window.MOLA_BUNDLED_COMPONENTS || [];V.bundles = V.bundles.map(function (bundle) {return bundle.replace(/\.js$/, '');});require(['activity/captain/index'].concat(V.bundles), function (index) {index.enter();});
需要将这两部分,进行替换为空。解决方案:获取头部对应结尾的关键字符串,尾部对应的头部关键字符串,通过indexOf函数获取对应的字符串位置。
//2.数据清洗,标题头处理,转换成标准的json格式; var index1 = res.indexOf('{"page"');//头部数据,找到指定字符串的位置; var index2 = res.indexOf(';V.bsData');//尾部数据,找到指定字符串的位置; console.log(index1); console.log(index2); })
三、对字符串利用substring函数进行替换:
/*3.截取需要的字符串*/ var data = res.substring(index1, index2); console.log(data);
四、标准数据输出
/*4.标准数据输出*/ var dataObj = eval("(" + data + ")");//设置json类型,解决返回undefined的问题 console.log(dataObj.component[0]);
完整的代码:
//使用$.get(),必须http服务器支持,无法本地访问; $.get('https://www.maomin.club/fy/get/', function (res, status) { /*1.读取数据,查看数据格式,按照需求进行数据清洗处理;*/ //console.log(res); //2.数据清洗,标题头处理,转换成标准的json格式; var index1 = res.indexOf('{"page"');//头部数据,找到指定字符串的位置; var index2 = res.indexOf(';V.bsData');//尾部数据,找到指定字符串的位置; //console.log(index1); // console.log(index2); /*3.截取需要的字符串*/ var data = res.substring(index1, index2); // console.log(data); /*4.标准数据输出*/ var dataObj = eval("(" + data + ")");//设置json类型,解决返回undefined的问题 console.log(dataObj.component[0]); })
接下来,讲述如何利用获取的数据进行echarts的数据可视化展示。
Done!