微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

被忽视的JSON.stringify用法

前言

平常在使用JSON.stringify,通常直接用来将对象或数组转化成字符串,也就是JSON.stringify(value),原来它还有两个可选参数,完整的JSON.stringify(value[,replacer][,space])

  • value:必选,要被转化的对象或数组。
  • replacer:可选,分为两种方式,一种数组,另一种方法

    1. replacer为数组,转化数组中具有键值的成员。成员的转化顺序与键在数组中的顺序一样。当value参数也为数组时,将忽略replacer数组。
    2. replacer函数,则调用函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是一个空字符串:""。
  • space:可选,向返回值 JSON文本添加缩进、空格和换行符以使其更易于读取。

    1. 如果省略 space,则将生成返回值文本,而没有任何额外空格。
    2. 如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。
    3. 如果 space 是一个非空字符串(例如“t”),则返回值文本在每个级别中缩进字符串中的字符。
    4. 如果 space 是长度大于 10 个字符的字符串,则使用前 10 个字符。

JSON.stringify(value)

转化对象

// {"name":"alean","age":22}

转化数组

// ["alean",22]

ps: 非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。

布尔值、数字和字符串在对象或数组中会被转化成对应的原始值。

undefined、任意的函数Symbol值,在对象中会被忽略。

console.log(JSON.stringify(obj1));

// {"name":"alean","age":22,"height":180}

undefined、任意的函数Symbol值,在数组中会被转化成null

console.log(JSON.stringify(arr1));

// ["alean",null,null]

不可枚举的属性会被忽略

console.log(JSON.stringify(obj2));

// {"height":22}

JSON.stringify(value,repacer)

replacer为数组,转化数组中具有键值的成员。成员的转化顺序与键在数组中的顺序一样。当value参数也为数组时,将忽略replacer数组。

console.log(JSON.stringify(obj3,['age']));

// {"age":22}

console.log(JSON.stringify(arr3,'1'));

// ["alean",22]

replacer函数,则调用函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined,则排除成员。根对象的键是一个空字符串:""。

function replacer (key,value) {
if(typeof value === 'number' || typeof value === 'object') {
return value;
}
}

console.log(JSON.stringify(obj4,replacer));

// {"age":22,"height":180}

JSON.stringify(value,repacer,space)

如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。

console.log(JSON.stringify(obj5,20));

/
{
"name": "alean","age": 22
}
/

如果 space 是一个非空字符串(例如“t”),则返回值文本在每个级别中缩进字符串中的字符。

console.log(JSON.stringify(obj6,'\n'));

/**
{

"name": "alean","age": 22
}
**/

完~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐