概述
JSON 即 (Javascript Object Notation,Javascript 对象表示法),是在Javascript中写结构化数据的方式。而JSON本身只是一种数据格式。
通常开发项目中通过JSON传输的数据并不能直接使用,需要在前端或者后端进行序列化和解析,比如:
var book = { name:"json 序列化和解析", page:1, author:["michael.guo","michael.shuai"] }
var jsonText = JSON.stringify(book); //把javascrip对象序列化为一个JSON字符串
注意:默认情况下jsonText不包含任何格式缩进、空格。
var bookCopy = JSON.parse(jsonText);//把JSON字符串解析为原生Javascript值
然后bookCopy就可以使用了,比如console.log(bookCopy.page); //1
序列化选项
JSON.stringify()除了可以序列化Javascript的对象外,还可以通过接收两个参数控制JSON的序列化结果。比如
数组:
var jsonText = JSON.stringify(book,["name"]);
返回
{"title":'json 序列化和解析'"}
函数:
var jsonText = JSON.stringify(book,function(key,value){ switch(key){ case "name": return value.join(","); case "author": return undefined; default: return value; } });
返回
{"name":"json 序列化和解析"}
这里只有一个name,author去哪了?
因为author返回的undefined在过滤的时候被自动删除了。
字符串的缩进
刚才说默认是没有格式的,那么如果我想要有格式的呢?
没问题!例如,已2个空格为单位缩进。如下:
var jsonText = JSON.stringify(book,null,2);
或者
你想玩点新花样?
var jsonText = JSON.stringify(book,null,"-");
toJSON()方法
尽管JSON.stringify()可以满足大多数需求,但当处理Date对象的时候还是非常不方便,尽管有toIOSString()可以达到目的,但如果有偷懒的理由,为什么不?
//返回字符串的 Date 对象,并格式化为 JSON 数据: var d=new Date(); var n=d.toJSON(); //n 输出结果: 2016-02-05T02:46:42.972Z