JSON (JavaScript ObjectNotation)JS对象记号,是JavaScript中一个标准子集,所以用JavaScript平台处理JSON是最合适的。
JSON有两种基本结构:
1、A collection of name/value pairs (键值对的集合),如 var t={"name":"h5"}
2、An ordered list of values. In most languages, this is realized as an array,vector, list, or sequence.( 一个有序的列表(数组、向量、列表、队列),如vart=["h1","h2","h3","23"];
今天主要讲第一种基本结构JSON的操作:
一、通过访问key获取对应的value
这里有两种方法:一是 对象.key,比如对于json数据var t={"name":"h5"},t.name就可以获取h5;二是对象['key'],t[“name”]也可以得到h5这个值。但是如果遇到如下
两种情况,只能用第二种方法:
1、key是数字开头的时候
2、key是变量名的时候
3、key包含空格的时候
二、遍历json的key
如何遍历var p={"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}中的键?
也有两种方法:
1、用for循环
for(var key in p){
alert(key);
}
2、Object.keys方法获取
var keys=Object.keys(p);
for(var k=0;k<keys.length;k++){
alert(keys[k]);
}
三、遍历json的值
如何遍历var p={"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}中的值?我们知道,值可以根据键获取,所以如果有两种方法实现遍历键,就有两种方法获取值,只要知道值=对象[‘键’]即可,除此之外,还可以通过Object.values()获取。
1、for循环遍历p的所有value
for(var key in p){
alert(p[key]);
}
2、通过Object.keys方法获取键,再获取值
var keys=Object.keys(p);
for(var k=0;k<keys.length;k++){
alert(p[keys[k]]);
}
3、Object.values()方法
除了上述两种方案外,还有Object.values()这个方法。但是,该方法并不是所有浏览器都支持。
var values=Object.values(s);
for(var k=0;k<values.length;k++){
alert(values[k]);
}
四、添加属性
默认情况下,只要通过json对象[‘新key’]=新value,既可以往json对象添加一个键值对。需要注意的是新添加的key一定是原json对象中不存在的key,否则就变为修改了。
比如var p={"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}json数据,运行如下代码 p[‘sex’]=’男’; 结果为
p={"firstName":"Brett","lastName":"McLaughlin","email":"aaaa",”sex”:”男”}
五、删除属性
调用delete 方法即可。
比如p={"firstName":"Brett","lastName":"McLaughlin","email":"aaaa",”sex”:”男”}
delete p[‘sex’]
结果为:
p={"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
六、修改属性
重新给对象的属性赋值即可,比如把p对象的email属性改为http://www.163.com,只要编写如下代码:p[‘email’]=’ http://www.163.com’。
七、扩展
Object.preventExtensions()方法用于锁住对象属性,使其不能够拓展,也就是不能增加新的属性,但是属性的值仍然可以更改,也可以把属性删除,Object.isExtensible()用于判断对象是否可以被拓展。
Object.seal( ) 方法可以让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可以修改已有属性的值的对象。
Object.freeze();[
终极神器,完全冻结对象,在seal的基础上,属性值也不可以修改(每个属性的wirtable也被设为false)。