博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSON.stringify(), JSON.parse(), toJSON()方法使用
阅读量:4116 次
发布时间:2019-05-25

本文共 2614 字,大约阅读时间需要 8 分钟。

JSON.stringify()--将value(Object, Array, String, Number...)序列化为JSON字符串

JSON.parse(), 将json数据解析为js原生值

toJSON(), 作为JSON.stringify()的第二个参数(函数过滤器)补充

 

* JSON.stringify()
   @specify : serialization(序列化)
   @method : JSON.stringify(value,filter,indent);
   @return : JSON字符串
  @param : value {type :String|Object|String|Number|Boolean|null} {explain :传入的类型可以是列出的這些}
  @param : filter : {type : []|{}} {explain :过滤器可以是个数组,也可以是个函数}
  @param : indent : {type : Number | 特殊符号} {explain :如果是数字则代表空白符的个数,最多10个;也可以直接传入缩进的符号}
 
 

var gather = {

id : 1314,

name : 'pom',

infor : {

age : 20,

sex : 'man',

marry : false,

identity : 622421,

habit : ['篮球','台球','乒乓球','游戏',true]

},

family : ['妈妈','爸爸','弟弟'],

likeGames : ['PCgame','Netgame']

};

var jsonText = JSON.stringify(gather,null,4);
//第二个参数是数组,只会序列化返回数组里列出的名称
var jsonText1 =JSON.stringify(gather,['id','family'],'=');
var jsonText2 = JSON.stringify(gather,function(key,val){
          switch(key){
                     case 'id':
                             return 'id is '+val;
 
                      case 'family':
                              return val.join( );
case 'info':
      // info的val还可以使用JSON.stringify()
      // return JSON.stringify(val,["age","sex"])
     return Object.prototype.toString.call(val).slice(8,-1)
case 'likeGames':
     //通过返回undefined删除该属性
   return undefined;
//一定要default,以便传入的其他值能正常的返回到序列化结果中
default:
return val;
          }
},10)
 

-------------------------------------------------------------------

* toJSON()
* @specify :JSON.stringify()不能满足对某些对象进行自定义序列化的需求,可以通过对象那个上调用toJSON()方法
* @method : date.toJSON()
* @return : 返回任何序列化的值。
* JSON.parse() ,eval_r() 也可以解析并返回js对象和数组等。但IE8以下浏览器会有安全隐患。
* @specify : 将json字符串解析为原生的javascript值。
* @method : JSON.parse(val,replacer)
* @param : val{type : String} {explain : 需要解析的json字符串}
* @param : replacer {type : function} 
{explain :和JSON.stringify()第二个参数类似,接受2个参数,key,val,不过是用来还原json串的函数}

 

var products = {
name : "leading",
"time" : new Date(2012,03,1),
toJSON : function(){
//只返回name
return this.name;
}
}
var proStr = JSON.stringify(products);
console.log(proStr);
//obj中的relaeseDate对象序列化之后成了有效的json串
var obj = {
title : '对象的标题',
type : 'primitive' ,
releaseDate : new Date(2012,03,1)
};
//转化为json串
var o = JSON.stringify(obj);
console.log(o

 

 

//在parsedO中还原为一个Date对象(会基于相应的值创建一个新的Date对象,结果parsedO.releaseDate属性中保存了一个Date对象)
var parsedO = JSON.parse(o,function(k,v){
if(k == 'releaseDate'){
return new Date(v);
}else{
return v;
}
});
console.log(parsedO);
//可以调用getFullYear()
console.log(parsedO.releaseDate.getFullYear()); //2012

 

 
toJSON()作为JSON.stringify中第二个参数(函数过滤器)补充,理解内部顺序很重要。
 
假设把一个对象传入JSON.stringify() 序列化对象的顺序如下:
 
 
 
(1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,按默认顺序执行序列化
 
 
 
(2)如果提供了第二个参数,应用这个函数过滤器,传入的函数过滤器的值是第(1)步返回的值。
 
 
 
(3)对第(2)步 返回的每个值进行相应的序列化。
 
 
 
(4)如果提供了第三个参数,执行相应的格式化操作。

 

 

转载地址:http://osupi.baihongyu.com/

你可能感兴趣的文章
3种前端实现.md文件转换成.html文件的方式
查看>>
9个web前端程序员需要知道的有用Web应用程序
查看>>
在Angular7中如何创建拖放列表?
查看>>
【开发小技巧】32—如何利用HTML、CSS和jQueryUI创建拖放功能以对图像进行重新排序?...
查看>>
血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息
查看>>
设计模式之代理模式
查看>>
Vite2 项目工程化和原理,一次讲清楚
查看>>
21个可以提升你的网站设计水平的网站动画工具
查看>>
设计模式之观察者模式
查看>>
20个关于程序员的笑话,看懂了,你就不会笑了,也不会羡慕他们工资高了!...
查看>>
你应该知道的3个强大的CSS功能
查看>>
12个Web开发工程师会犯的错误,有你吗?
查看>>
华为一夜裁掉7000员工:别在最好的年纪,活得太安逸!
查看>>
5个你可能不知道的很棒CSS功能
查看>>
6种你应该知道的强大JavaScript对象方法
查看>>
在职场,这10句话千万不能在公司说,任何一句,就足以毁掉你的职场生涯!...
查看>>
11个你不应该错过的JavaScript库
查看>>
7个你可能不知道但有用的HTML属性
查看>>
JavaScript 执行环境与作用域、函数的创建和调用
查看>>
董明珠:没有人才,一切归零;没有道德,人才归零
查看>>