zheglei 2016-01-14
看下面这个例子:
<script type="text/javascript"> function set() { var outer = {}; //outer.a = 10; outer[b] = 20; var apps = ["key1", "key2"]; for(var i=0; i<apps.length; i++) { var appId = apps[i]; var a = (i+1)*10; var b = (i+1)*12; var perAppData = {"a":a, "b":b}; outer[appId] = perAppData; //var c = {}; //c[appId] = perAppData; //outer[appId] = perAppData; //outer = $.extend(outer, c); //outer.appId = perAppData; } var t = outer; alert(t.key1); alert(t['key2']); } </script>
这个例子模拟的是我今儿下午遇到的一个情况:json的嵌套!
具体情形是:有一个外层的json, 他的key是字符串 value又是一个具体的(内层)json。我需要通过循环形成这个大的(外层)json。key是变量加进去的~
这个大的json的结构对应于后台java数据结构就是Map<String, Map<String, String>>了…………
之前只知道在js中取json的值有2种方式 :第一种是用中括号json[key] 第二种是用点json.key都行,对应的也有赋值。json[key] = jsonValue和json.key = jsonValue 但只是很笼统的认知~~~~
比如上述例子模拟的情况,key是appId变量来赋值的。如果你用json.appId是不行的,你将会得到{"appId" : jsonValue}而不是理想的结果。因为此时你用json.appId时,appId会被当成一个字符串文本而不是把它当成一个变量取他对应的值,json.[appId]则是把appId当成一个变量, json.[appId]则是相当于json.key1 = {"a":10, "b":12}和json.key2 = {"a":20, "b":24}。
同理,取值的时候,如果你用 json[key2]是会报错的,因为他此时会把key2当成一个变量,它会去找key2这个变量对应的值来作为key,当然也会报错。所以需要json['key2'],等效于 json.key2.
上述demo得到的outer会是这样的:
达到了预期的效果。
综上:json.appId是把appId当成字符串作为key的 json[appId]是把appId作为变量,而取的是appId这个变量的值作为key。。