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

来源:互联网 发布:天天向上四大网络作家 编辑:程序博客网 时间:2024/06/10 13:18

看下面这个例子:

<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。。

 

  • 大小: 5.5 KB
  • 查看图片附件
0 0
原创粉丝点击