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