"[0,{"id":563,"name":"测试题1","dscr":null,"picId":null,"setting":"简单:10:5,一般:5:10,困难:2:20"}"
//像上面这种比较复杂的字符串数组怎么解析?
{"setting":"简单:10:5,一般:5:10,困难:2:20"}
//像这样的对象怎么解析?
写这样接口的人也真是无语了。
分析:
"[0,{"id":563,"name":"测试题1","dscr":null,"picId":null,"setting":"简单:10:5,一般:5:10,困难:2:20"}"
明显的字符串数组,我们在使用它时,必须使用JSON.parse(data)将字符串转为数组
JSON.pares(data)//字符串数组转数组
转换成功后的数组为:
[
0:0,
1:{
dscr:null,
id:236,
name:"测试题1",
picId:null,
setting:"简单:10:5,一般:5:10,困难:2:20"
}
]
这篇文章重点说明转换后的数组中属性为 setting 的值的获取方法,因为根据这道笔试题,是要分别取出这些值:
说明:
它表示:
type="简单"的题有quantity=10道, 每道题score=5分;“一般”的题目有5道,每道题10分;“困难”的题有2道,每道题20分
{"setting":"简单:10:5,一般:5:10,困难:2:20"}
从这个对象看,这个setting属性有个比较复杂的值,这个值由三个type组成,它们之间都由 ,逗号相连,如果分别取值的话,可以分三步走:
1、先取出每一个type,并组成一个数组,因为三个type间是由 , 逗号隔开,因此要使用 split(',')分离;
//根据逗号分离 var arr = setting.split(',');
//分离后的数据为: [ 0:"简单:10:5", 1:"一般:5:10", 2:"困难:2:20" ]
2、再取出arr数组中每一个对象的value,分析,每个vlaue由三个字符组成,分别由 : 冒号相连,如果要取值的话,仍需使用 split(':')分离
if(str.length > 0){ for(var j = 0; j < str.length; j++){ //将这个字符串 "简单:10:5" 分别截取 var strItem = str[j]; //将这个字符串 "简单:10:5" 分别截取 var strSplit = strItem.split(':'); } }
//分离后的数据 Array[3] 0:"简单", 1:"10", 2:"5"
3、分别取出:
var strType,strQuantity,strScore; for(var z = 0; z < strSplit.length; z++){ strType = strSplit[0]; strQuantity = strSplit[1]; strScore = strSplit[2];} }
//取出后的数据 strType "简单" strQuantity "10" strScore "5"
这时就可以做任何事情了,不过这个后端的接口也真是郁闷的紧!