当我们对象里有特殊的Key,或者不是字符串的Key,处理起来稍微有点麻烦。
就上面的Demo,我们取name,那么就是json.name就可以取到“本兮”。其实很好理解这个点“.”就是类似于“的”的感觉,json的name。这么理解是不是很好理解?
那么问题来了,如果JSON如下数据,你们可以试试。
var json = {
"1": {
"name": "本兮",
"age": "22"
},
"2": {
"name": "关晓彤",
"age": "20"
}
};
alert(json.1.name);// X 错误 throw Uncaught SyntaxError;
按我们刚刚的逻辑直接点,那么我们要取到“关晓彤”就应该是。json.1.name吧,但是你会发现报错,错误信息应该是Uncaught SyntaxError,语法错误,请自行测试,那么正确应该怎么获取呢?
//正确的打开姿势如下:
alert(json[1].name);
alert(json["1"].name);
alert(json["1"]["name"]);
//错误,undefined
alert(json["1"][name]);
其实上面看出了一个问题,那么就是数值可以不带引号,String必须带引号,再次强调:严格来讲是双引号,个别弱语言支持单引号。
运行一下试试
JSON 特殊Key,Number篇(2)
严格来讲是双引号,个别弱语言支持单引号。还有一个问题就是,弱语言除了String类型,其他的明确类型不用单引号或者双引号。把上面的Demo在弱语言里可以这么写,比如在Javascript中可以这么写,没有任何瑕疵。
var json = {
1: {
"name": "本兮",
"age": "22"
},
2: {
"name": "关晓彤",
"age": "20"
}
}
我们再来尝试获取一次。
运行一下试试
结果已经看到了,其实没问题,所以要区分强弱语言的问题,建议还是强烈要求自己,按规范来,这样肯定没毛病。
注意:其他的我就不多说了,其实都是一样,比如boolen类型的Key,null类型的Key都是一样的处理方式。