JSON 序列化和解析

概述

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
原文地址:https://www.cnblogs.com/crafts/p/5181068.html