缘起:

在组装echart页面的时候,遇到这样一个问题,它是一个需要在循环内层的时候,同时循环外层,在内层循环中就要将外层获取的值存入,导致了一种纠缠状态,费了老劲儿,终于得到如下解决。记录之,绿色为语句功能注释。

/**
* @desc 获取用户使用网络数据
* @param index_type
* @param chatId
*/
function getNetWorkData(index_type,chatId,start,end) {
// 传递三个参数,index_type为数据类型,chatId为echarts容器Id,start为所取数据开始时间,end为结束时间
var app_id = get_app_id();
//从cookie获取当前应用id串,该id在ue文件中
var qdate =$("#date-written").text();
//从月份选择控件中取当前选择月份
var date_str="";
//定义一个空字符串变量
qdate=qdate.replace("年", "/");
//对月份进行处理,替换汉字"年"为"/"
qdate=qdate.replace("月", "/01");
//对月份进行处理,替换汉字"月"为"/01"
date_str = qdate.trim(); //查询时间
//去除月份字符串头尾空格
if (date_str != null && date_str != undefined) {
//只有当月份参数不为空才发起ajax请求
$.post(
"/jppt/jp-index-data/comments",
//请求地址
{
appid: app_id,
indexType: index_type,
startDate:start,
endDate:end
},
//请求参数,对象表示
function (result,status) {
//接收返回的json格式字符串及状态码
if (checkResult(result)) {
//检测数据返回是否正常
result = JSON.parse(result);
//对返回的字符串解析为json对象并赋值
console.log(result);
var xAxisData=[],series=[],appstore=[],legendData=[],
//定义x坐标显示名数组,series为图形值数组,appstore为临时数组,legendData为图标title数组
data = result['data'],comment;
//取所需使用的对象赋值,定义一个临时变量
$.each(data, function (app,obj) {
//遍历data对象,app为键值即app名,obj为每个app的值,一个存储有关于该app信息的对象
xAxisData.push(app);
//将app名推入x坐标数组,用于组装option
$.each(obj,function (i,a) {
//对obj对象进行二次遍历
var t = a['indexValue'].split("|");
//indexValue:"3G:0.2686155493365|4G:0.68090354160497|WIFI:0.72134356910983" 对此格式的字符串进行分割处理,成为t数组
$.each(t,function (j,s) {
//对t数组进行遍历,j为索引值,s为键值
comment = s.split(":");
//对分割后的数组如["3G:0.2686155493365"]进行二次分割成["3G",""0.2686155493365]
if(!appstore[j]){
//检测临时数组是否有属性j,即第j个存不存在,不存在则定义一个空数组,此处使用hasOwnProperty也是可以的,用以检测键名是否存在,以下同
appstore[j] = [];
}
if(!legendData[j]){
//如果图标数组含有j属性,将切割后的comment键名赋值给它,比如4G,此数组将用来在option中进行循环,因为series单元的数量由其决定
legendData[j] = comment[0];
}
var temp = (comment[1]*100).toFixed(2);
//截取长字符串为小数点后2位
appstore[j].push(temp);
//将截取后的字符串推入动态数组
});
}); });
//循环option中的series,循环图标名及data值
$.each(legendData,function (i,n) {
seriesItem = {
name: n,
type: 'bar',
barGap:"15%",
barWidth:90,
label: {
formatter: "{a} :{c} %",
position: "insideRight",
show: true
},
itemStyle: {
normal: {
label: {
formatter: "{a} : {c} %",
position: "insideRight",
show: true
}
}
},
data:appstore[i]
};
series.push(seriesItem);
//循环一次,将组装好的单元推入series数组
}); var dom = document.getElementById(chatId);
var myChart = echarts.init(dom);
var option=setNetWordOption(legendData,xAxisData,series);
if (option && typeof option === "object") {
myChart.setOption(option, true);
}
} else {
console.log("数据异常");
}
if(status == "success"){
$("#umask").removeClass("mask");
}
});
} }

一个解析json串并组装echarts的option的函数解析的更多相关文章

  1. Boost property_tree解析json

    使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,i ...

  2. JSON语言规范与Java中两种解析工具基本使用

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html  一:JSON语言规范 一言以蔽之:“一个 :一个键值对,一个{}一个对象,一个[]一个 ...

  3. Android中解析Json数据

    在开发中常常会遇到解析json的问题 在这里总结几种解析的方式: 方式一: json数据: private String jsonData = "[{\"name\":\ ...

  4. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  5. 解析JSON的两种方法eval()和JSON.parse()

    解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...

  6. Java解析Json数据的两种方式

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  7. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

  8. 再次提供一个纯粹通过pl/sql解析json的方法。

    在github上面有一个叫pljson的项目,该项目就是用pl/sql 来解析json的. 项目地址:pljson(需翻|强),如果翻不了强的同学,我在国内克隆了一个副本,不定期同步更新 pljson ...

  9. Python3基础 json.loads 解析json格式的数据,得到一个字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

随机推荐

  1. python学习笔记(基础二:注释、用户输入、格式化输出)

    注释 单行:# 多行:上下各用3个连续单引号或双引号 3个引号除了多行注释,还可以打印多行 举例: msg = ''' name = "Alex Li" name2 = name ...

  2. SpringMVC 入门

    MVC 简介 1.MVC 是一种架构模式 程序分层,分工合作,既相互独立,又协同工作,分为三层:模型层.视图层和控制层 2.MVC 是一种思考方式 View:视图层,为用户提供UI,重点关注数据的呈现 ...

  3. java的原子性操作有哪些

    Java中的原子操作包括:1)除long和double之外的基本类型的赋值操作2)所有引用reference的赋值操作3)java.concurrent.Atomic.* 包中所有类的一切操作coun ...

  4. Python 生成器与迭代器 yield 案例分析

    前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...

  5. 4款最具影响力的自助式BI工具

    数据为王的时代,人人都需要掌握一些数据分析技能.不懂SQL,不懂数据库,Excel不精通,VBA不敢碰,这些都是横亘在面前的一道坎. 然而,企业数据分析日益上涨,数据人才供不应求,为了降低入门门槛,近 ...

  6. sharepoint 计算列 年龄

    1.建立一个字段叫做Today ,(类型为文本都行) 2.建立你想要计算字段年龄,公式=IF(ISBLANK(出生年月),"NA",DATEDIF(出生年月,Today," ...

  7. (十四)Maven聚合与继承

    1.Maven聚合 我们在平时的开发中,项目往往会被划分为好几个模块,比如common公共模块.system系统模块.log日志模块.reports统计模块.monitor监控模块等等.这时我们肯定会 ...

  8. pc端与移动端的区别

    移动设备和PC本身有区别: 1.屏幕尺寸不同,屏幕大小导致显示的内容页不一样. 2.网络速度不同:手机分2G.3G.4G.WIFI等,我们要少用图片,JS.动画等等,用户打不开一样起不了作用. 3.使 ...

  9. Windows下SVN服务器的搭建步骤

    1.下载svn服务端和客户端 服务端VISUALSVN SERVER:https://www.visualsvn.com/ 客户端TortoiseSVN:https://tortoisesvn.net ...

  10. Mongodb 3.2 Manual阅读笔记:CH9 存储

    9. 存储 9. 存储 9.1 存储引擎 9.1.1 WiredTiger存储引擎 9.1.1.1 文档级别并发 9.1.1.2 快照和检查点 9.1.1.3 Journaling 9.1.1.4 压 ...