JavaScript基础之JSON

来源:互联网 发布:知豆可以开多少公里 编辑:程序博客网 时间:2024/05/16 09:00

JSON是JavaScript Object Notation的缩写,是一种数据交换格式。
在JSON中,一共就这么几种数据类型:
1.number:和JavaScript的number完全一致;
2.boolean:就是JavaScript的true或false;
3.string:就是JavaScript的string;
4.null:就是JavaScript的null;
5.array:就是JavaScript的Array表示方式—[];
6.object:就是JavaScript的{…}表示方式
并且JavaScript还定死了字符集必须是UTF-8,为了统一解析,JSON的字符串规定必须用双引号“”,object的键也必须用双引号“”。

序列化

var xiaoming={name:'小明',age:14,gender:true,height:1.65,grade:null,'middle-school':'\"W3C\"Middle School',skills:['JavaScript','Java','Python','Lisp']};JSON.stringify(xiaoming);

要输出得好看一些,可以加上参数,按缩进输出:

JSON.stringify(xiaoming,null,'');

结果

{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\"Middle School","skills":[  "JavaScript",  "Java",  "Python",  "Lisp"]}

第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array:

JSON.stringify(xiaoming,['name','skills'],' ');

结果:

{  "name":"小明",  "skills":[     "JavaScript",     "Java",     "Python",     "Lisp"  ]}

还可以传入一个函数,这样对象的每个键值对都会被函数先处理:

function convert(key,value){    if(typeof value==='string'){        return value.toUpperCase();     }}JSON.stringify(xiaoming,convert,' ');

上面的代码把所有属性值都变成大写:

{  "name":"小明",  "age":14,  "gender":true,  "height":1.65,  "grade":null,  "middle-school":"\"W3C\" MIDDLE SCHOOL",  "skills":[     "JAVASCRIPT",     "JAVA",     "PYTHON",     "LISP"   ]}

如果我们还想要精确控制如何序列化小明,可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据:

var xiaoming={  name:"小明",  age:14,  gender:true,  height:1.65,  grade:null,  'middle-school':'\"W3C\" Middle School',  skills:['JavaScript','Java','Python','Lisp'],  toJSON:function(){     return{        'Name':this.name,        'Age':this.age     };   }};JSON.stringify(xiaoming);//'{"Name":"小明","Age":14}'

反序列化

拿到一个JSON格式的字符串,我们直接用JSON.parse()把它变成一个JavaScript对象:

JSON.parse('[1,2,3,true]');//[1,2,3,true]JSON.parse('{"name":"小明","age":14}');//Obejct{name:'小明',age:14}JSON.parse('true');//trueJSON.parse('123.45');//123.45

JSON.parse()还可以接收一个函数,用来转换解析出的属性:

JSON.parse('{"name":"小明","age":14}',function(key,value){      if(key==='name'){          return value+'同学';      }      return value;});
原创粉丝点击