JSON.stringify() 、JSON. parse()方法详解
创始人
2024-02-05 21:18:40
0

JSON.stringify()

用法:JSON.stringify(value, [replacer], [space])

第一个参数:

value: 必选,将要序列后成 JSON 字符串的值。

第二个参数:

replacer: 可选

  • 如果是一个函数,则在序列化过程中,属性进行转换或处理。如果函数返回值为undefined 或者 函数时,该属性就会被过滤掉;
  • 如果是一个数组,那么只包含在这个数组中的属性名才会被序列化
  • 如果该参数为 null 或者未提供,则对象所有的属性都会被序列化。
// 函数
const obj = { a: '1', b: 2, c: '3'};
const objStr = JSON.stringify(obj, (key, value) => {if(typeof value === 'string') return undefined;return value;
})
console.log(objStr);  // '{"b":2}'
// 数组
const obj = { a: '1', b: 2, c: '3'};
const objStr = JSON.stringify(obj, [ 'a', 'b'])
console.log(objStr); // '{"a":"1","b":2}'

第三个参数

space:可选,用于指定缩进的空白字符串,作用于美化输出

const obj = { a: '1', b: 2, c: '3'};
// 1. 如果该参数没有提供(或者为 null),将没有空格。
const objStr1 = JSON.stringify(obj, [ 'a', 'b'])
console.log(objStr1); // 2. 如果是数字,它代表多少个空格;上限为10,若小于1则表示没有空格
const objStr2 = JSON.stringify(obj, [ 'a', 'b'], 5)
console.log(objStr2); // 3. 如果是字符串,就在每行输出值的时候把这些字符串附加上去。最大长度也是10个字符
const objStr3 = JSON.stringify(obj, [ 'a', 'b'], 'uu')
console.log(objStr3); // 4. 如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车
const objStr4 = JSON.stringify(obj, [ 'a', 'b'], '\t')
console.log(objStr4); 

在这里插入图片描述

特性

1. toJSON() 方法

转换值如果有 toJSON() 方法,toJSON() 方法返回什么值,序列化结果就返回什么值,其余值会被忽略。

const obj = {a: 1,toJSON() {return '11'}
}
console.log(JSON.stringify(obj)) // "11"

2. 布尔值、数字、字符串的包装对象

布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值

console.log(JSON.stringify([new Number(1), new String("1"), new Boolean(true)])) 
// [1,"1",true]

3. 非数组对象

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

4. undefined、任意的函数以及 symbol 值

  • 出现在对象属性值中: undefined、任意函数、Symbol 值在序列化过程中将会被忽略
  • 出现在数组中: undefined、任意函数、Symbol值会被转化为 null
  • 单独转换时: 会返回undefined
const obj = {a() {},b: undefined,c: 1,b: Symbol(1)
};
const strObj = JSON.stringify(obj);
console.log(strObj); // '{"c":1}'const arr = [undefined, 1, function a(){}, Symbol(1) ];
const strArr = JSON.stringify(arr);
console.log(strArr); // '[null,1,null,null]'const str1 = JSON.stringify(undefined);
console.log(str1) // undefined
const str2 = JSON.stringify(function a() {});
console.log(str2) // undefined
const str3 = JSON.stringify(Symbol(1));
console.log(str3) // undefined

5. 循环引用

对包含循环引用的对象(对象之间相互引用,形成无限循环)执行此方法,会抛出错误。

const obj1 = {a: '1'};
const obj2 = {obj : obj1};
obj1.c = obj2;
JSON.stringify(obj1) // 报错

在这里插入图片描述
6. Symbol

以 symbol 为属性键的属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。

const obj = {a: '1',[Symbol('b')]: true,
}
function replacer(key, value) {if (typeof key === "symbol") return value;
}
console.log(JSON.stringify(obj)) // {"a":"1"}

7. Date对象

Date对象上部署了toJSON方法(同 Date.toISOString()), 因此会被当做字符串处理。

console.log(JSON.stringify(new Date())); // "2022-11-21T07:05:24.919Z"

8. NaN Infinity null

NaN Infinity null 此三类数值序列化过程中会被当作null

const str = JSON.stringify([Number('123a'), +'123a', 1/0]
console.log(str);   // "[null,null,null]"

9. 可枚举属性

其他类型的对象,包括 Map/Set/WeakMap/WeakSet,仅会序列化可枚举的属性。

const obj = {};
Object.defineProperties(obj, {'a': {value: '1',enumerable: true,},'b': {value: '2',enumerable: false,}
})
console.log(JSON.stringify(obj)) // {"a":"1"}

JSON.parse()

用法:JSON.parse(text, [reviver])

第一个参数:

text: 必需,一个有效的 JSON 字符串。(不允许用逗号作为结尾)

第二个参数:

reviver:可选,转换结果的函数, 将为对象的每个成员调用此函数。函数的遍历顺序依照:从最内层开始,按照层级顺序,依次向外遍历

const objStr = '{"a":1,"b": {"c": 2}}';
const obj = JSON.parse(objStr, function(key, value) {console.log(key); // 'a' 'c' 'b' ''
});

相关内容

热门资讯

时代广场的蟋蟀好词好句   时代广场的蟋蟀好词好句  好词:  销声匿迹、绞尽脑汁、越来越少  人声鼎沸、四下张望、化为乌有...
描写天气炎热的句子 关于描写天气炎热的句子  1、太阳让人坐立不安在树下乘凉也感到急躁。  2、七月的天气,太阳正毒,晒...
描写桃花林的优美语句 描写桃花林的优美语句  1、于到了桃花山下,虽然今年春寒,漫山遍野的桃林只是零星地开着花。但游人还是...
公园春景作文 公园春景作文9篇  在平平淡淡的学习、工作、生活中,大家都有写作文的经历,对作文很是熟悉吧,作文可分...
游记作文 【必备】游记作文(精选22篇)  在学习、工作乃至生活中,大家一定都接触过作文吧,通过作文可以把我们...
下雪感慨的句子 下雪感慨的句子  在平时的学习、工作或生活中,大家都对那些朗朗上口的句子很是熟悉吧,句子可分为单句和...
珍惜友谊的友情句子 珍惜友谊的友情句子(精选165句)  在日常学习、工作或生活中,大家肯定对各类句子都很熟悉吧,句子的...
等待的作文600字 有关等待的作文600字六篇  在平平淡淡的学习、工作、生活中,大家一定都接触过作文吧,作文是由文字组...
感谢母亲作文 感谢母亲作文15篇  在平日的学习、工作和生活里,大家都经常接触到作文吧,写作文可以锻炼我们的独处习...
美丽的原野作文 关于美丽的原野作文五篇  在我们平凡的日常里,大家总免不了要接触或使用作文吧,写作文是培养人们的观察...
那一刻,我真后悔600字作文 那一刻,我真后悔600字作文  新搬到这儿不久,我就结识了一个好伙伴,名叫涛晶,他9岁,我们俩在一起...
走在冷风中歌词 走在冷风中歌词  走在冷风中 - 邓奕  词:安立奎  曲:王于升  分手  从你口中说出十分冷漠 ...
我发现了蚂蚁的秘密作文 我发现了蚂蚁的秘密作文(精选73篇)  在日常学习、工作和生活中,大家都接触过作文吧,借助作文可以提...
迪斯尼儿歌歌词:蛤蜊哟,淡菜 迪斯尼儿歌歌词:蛤蜊哟,淡菜  蛤蜊哟,淡菜  COCKLES AND MUSSELS  蛤蜊哟,淡...
优秀作文欣赏 优秀作文欣赏(精选10篇)  在日常学习、工作或生活中,许多人都写过作文吧,作文是由文字组成,经过人...
篮球王子作文800字 篮球王子作文800字  天空依然万里无云,从一家医院的手术室传出了一阵哭声,一个胖嘟嘟的小男孩顺利地...
三国人物的歇后语 三国人物有关的歇后语(精选80条)  歇后语是中国劳动人民自古以来在生活实践中创造的一种特殊语言形式...
献给母亲的诗 献给母亲的一首诗  在学习、工作乃至生活中,大家一定都接触过一些使用较为普遍的诗歌吧,诗歌是一种抒情...
黑夜里天空是愤怒的拳头作文 黑夜里天空是愤怒的拳头作文  在学习、工作或生活中,大家都不可避免地要接触到作文吧,作文是一种言语活...
他的父亲作文 他的父亲作文(5篇)  无论是身处学校还是步入社会,大家都有写作文的经历,对作文很是熟悉吧,作文是通...