环境
操作系统: win7
情形
最近遇到这么一个情况,后台使用LinkedHashMap
处理好数据,在使用renderJson()
返回数据的时候发现,数据的原有顺序没有了,后来才知道renderJson()
方法底层使用Gson
据网上说是使用HashMap
,所以是无序的。
后来,我后台处理采用List<Map>
的方式来返回数据,顺序有了,前端遍历的时候,遇到困难。
最开始我是这么遍历的:
for(var ld in data){//list<map>
for(var key in ld){
str += "<tr><td>"+ key +"</td><td>"+ ld2[key] +"</td></tr>";
}
}
结果拼接出来的结果是:key为0, ld2[key]为Object
。上面写法我是按照java
那套思路来写的,后来发现js
的遍历方法还是和java
有区别的。
for(var ld in data){//list<map>
//在java中ld是具体某个map
//在js中ld仅仅只是list数组的下标,要获取某个map,需要这么写:data[ld]
所以上面的代码需要这么写:
for(var ld in data){//list<map>
var ld2 = data[ld];
for(var key in ld2){
str += "<tr><td>"+ key +"</td><td>"+ ld2[key] +"</td></tr>";
}
}
这样就OK啦,但是我返回的map
里面有日期,它长这个样:Jun 7, 2017 1:40:26 PM
。结果,js
处理这个时间太蛋疼了,虽然网上有解决方法,但是我没有成功。最后我是在后台把时间转成相应格式的字符串。
数据类型和Json格式
看到大神的一篇文章:
里面有句话:
从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如”北京”这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如”北京,上海”。
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如”首都:北京”。