关于json之中括号和点号的取(赋)值的区别

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之中括号和点号的取(赋)值的区别
 达到了预期的效果。

综上:json.appId是把appId当成字符串作为key的  json[appId]是把appId作为变量,而取的是appId这个变量的值作为key。。

相关推荐