JSON.stringify()不知道的用法

点赞狂
• 阅读 1611

JSON.stringify()方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串,如果指定了 replacer 是一个函数,则可以选择性地替换值,或者如果指定了 replacer 是一个数组,则可选择性地仅包含数组指定的属性。
replacer 参数可以是一个函数或者一个数组。作为函数,它有两个参数,键(key)和值(value),它们都会被序列化。

在开始时,replacer 函数会被传入一个空字符串作为key值,代表着要被 stringify 的这个对象。随后每个对象或数组上的属性会被依次传入。 

函数应当返回JSON字符串中的value, 如下所示:

  • 如果返回一个Number, 转换成相应的字符串作为属性值被添加入 JSON 字符串。
  • 如果返回一个String, 该字符串作为属性值被添加入 JSON 字符串。
  • 如果返回一个Boolean, "true" 或者 "false" 作为属性值被添加入 JSON 字符串。
  • 如果返回任何其他对象,该对象递归地序列化成 JSON 字符串,对每个属性调用 replacer 方法。除非该对象是一个函数,这种情况将不会被序列化成 JSON 字符串。
  • 如果返回 undefined,该属性值不会在 JSON 字符串中输出。

注意: 不能用 replacer 方法,从数组中移除值(values),如若返回 undefined 或者一个函数,将会被 null 取代。

例子(function)

function replacer(key, value) {
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}

var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, replacer);

JSON序列化结果为 {"week":45,"month":7}.

例子(array)

如果 replacer 是一个数组,数组的值代表将被序列化成 JSON 字符串的属性名。

JSON.stringify(foo, ['week', 'month']);  
// '{"week":45,"month":7}', 只保留 “week” 和 “month” 属性值。

toJSON 方法

如果一个被序列化的对象拥有toJSON方法,那么该toJSON方法就会覆盖该对象默认的序列化行为:不是该对象被序列化,而是调用toJSON方法后的返回值会被序列化,例如:

var obj = {
foo: 'foo',
toJSON: function () {

return 'bar';

}
};
JSON.stringify(obj); // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'

点赞
收藏
评论区
推荐文章
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
lix_uan lix_uan
4年前
Java学习总结
JavaHashMap和HashTablejdk1.8中采用数组链表红黑树实现首先会创建一个默认长度为16,默认加载因为0.75的table数组根据hash值和数组的长度计算应存入的位置判断当前位置是否为空,如果为空则直接存入如果当前位置不为空,则调用equals方法比较属性值如果一样则替换为新的,如果不一样则采用头插法插入当节点数多于8
Easter79 Easter79
4年前
sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
<divclass"htmledit\_views"id"content\_views"<p&nbsp;函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。</p<preclass"has"name"code"<codeclass"hljssql"<
Chase620 Chase620
4年前
Vue方向:prop验证
我们可以为组件的prop指定验证规则,如果传入的数据不符合要求,Vue会发出警告,这对于开发给他人使用的组件非常有用。要指定验证规则,需要用对象的形式来定义prop,而不能用字符串数组;1、验证父组件传递过来的数据类型props选项值如果为数据,则表示只是单纯的罗列父组件传递过来的数据而已如果props选项的值是一个对象,那么表示要验证接收的
DaLongggggg DaLongggggg
4年前
python百题大冲关-查找两个总和为特定值的索引
本次挑战中,你需要在sum.py文件中补充函数two_sum的空缺部分。two_sum函数接受两个参数,nums用于指定传入的数组,val用于指定和的值;two_sum函数输出含两个索引的数组,或者TypeError、ValueError。你需要补充two_sum函数,使two_sum函数可以找到数组n
Stella981 Stella981
4年前
JavaScript中实现函数重载和参数默认值
参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高。举个例子,比如PHP中的字符串截取函数substr(string,start,length),当不指定length时,函数将默认截取字符串中start位置到字符串结束,而如果指定了length,则截取从start位置开始的以len
Wesley13 Wesley13
4年前
ES6新语法(二)
1.解构在ES6中,可以使用解构从数组和对象提取值并赋值给独特的变量,即将数组或对象中的值,拆成一个一个变量。解构:自动解析数组或对象中的值,并赋值给指定的变量。、1.1数组解构vararr3,4,5;vara,b,carr;
Wesley13 Wesley13
4年前
JSON 格式详 (转载)
简单地说,JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是JavaScript很容易解释它,而且JSON可以表示比"名称/值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅
Stella981 Stella981
4年前
JavaScript基础2
普通的JavaScript对象是命名值的无序集合,JavaScript同样定义了一种特殊的对象数组array,表示带编号的值的有序集合,JavaScript为数组定义了专用的语法,使得数组具有区别于普通对象而独有的行为特性JavaScript还定义了另一种特殊对象函数,函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码并返回运算结
Stella981 Stella981
4年前
JSON.stringify()
JSON.stringify() 将一个JavaScript值(对象或者数组)转换为一个JSON字符串,如果指定了replacer是一个函数,则可以选择性的替换值,或者如果指定了replacer是一个数组,可选择性的仅包含数组指定的属性。语法:JSON.stringify(_value_,_replacer_,_sp
Stella981 Stella981
4年前
JavaScript——数组(三)数组方法汇总
前面两篇大致介绍了一下数组的基本特性,这里说一下数组的常用方法:Array.join()   将数组中所有的元素都转化为字符串并拼接在一起,返回最后生成的字符串。  不改变原数组可通过指定的分隔符来分隔各个元素,如果不指定分隔符,则默认使用逗号。1vararr1,2,3;//创
点赞狂
点赞狂
Lv1
九月九日眺山川,归心归望积风烟。
文章
4
粉丝
0
获赞
0