JSON stringify方法原理及实例解析
JSON.stringify() 方法概述
JSON.stringify() 方法是 JSON 对象中的方法,用于将 JavaScript 对象转换为一个字符串。它可以将一个 JavaScript 对象序列化成一个 JSON 字符串,也可以对对象进行过滤、控制转换过程以及自定义替换值等操作。
语法如下:
JSON.stringify(value[, replacer[, space]])
- value:必需,要转换为字符串的值(通常是对象或数组)。
- replacer:可选,如果是函数,则 JSON.stringify() 的返回值将由该函数进行转换处理;如果是数组,则只有包含在该数组中的属性才会被序列化到最终的 JSON 字符串中;如果是空格数值,则会在最终的 JSON 字符串中使用空格缩进,可以传入一个非负整数表示空格数目,或一个 string 表示缩进字符串。
- space:可选,用于控制输出 JSON 字符串的缩进格式。
JSON.stringify() 方法原理
JSON.stringify() 的处理逻辑基于 JSON.stringify() 的参数 value,它可以是一切可序列化成 JSON 格式的值,值的序列化规则如下:
- 如果 value 是 undefined、function 或 symbol,则会被忽略掉(不会序列化)。
- 如果既不是对象也不是数组,则会被强制转换为字符串类型。
- 如果 value 是一个对象,则先调用它的 toJSON() 方法(如果存在),并以这个返回值作为 value。
- 对于数组或普通对象,JSON.stringify() 会遍历其所有可枚举的属性,根据属性本身的数据类型或者 replacer 参数的要求,将属性变成所需的形式。
- 对于某些特别的值,如 NaN、Infinity 和 -Infinity,则会被转换成 null。
- 对于 Date 类型,JSON.stringify() 默认使用toISOString() 来将日期序列化,而不会将其转换为字符串。
- 对于 RegExp 类型,除了返回 RegExp 对象实例本身外,不会有其他影响。
- 对于包含循环引用的嵌套对象或循环引用的数组元素,JSON.stringify() 会抛出一个错误。
JSON.stringify() 方法实例解析
示例一
const obj = {
name: 'John',
age: 25,
country: 'USA',
phone: {
mobile: '1234567',
home: '7654321'
},
skills: ['JavaScript', 'HTML', 'CSS'],
salary: undefined,
isProgrammer: true
};
const jsonString = JSON.stringify(obj, ['name', 'age', 'skills', 'isProgrammer'], 2);
console.log(jsonString);
输出结果:
{
"name": "John",
"age": 25,
"skills": [
"JavaScript",
"HTML",
"CSS"
],
"isProgrammer": true
}
在这个示例中,我们创建了一个包含各种类型数据的对象 obj,然后使用 JSON.stringify() 方法,只序列化了 obj 对象的 name、age、skills 和 isProgrammer 属性,输出的字符串用两个空格缩进。
示例二
const obj = {
name: 'John',
age: 25,
birth: new Date(1995, 1, 1),
skills: {
language: 'JavaScript',
level: 'advanced'
}
};
const jsonString = JSON.stringify(obj, function(key, value) {
if (key === 'birth') {
return value.getFullYear() + '-' + (value.getMonth() + 1) + '-' + value.getDate();
} else {
return value;
}
}, 4);
console.log(jsonString);
输出结果:
{
"name": "John",
"age": 25,
"birth": "1995-2-1",
"skills": {
"language": "JavaScript",
"level": "advanced"
}
}
在这个示例中,我们创建了一个包含 Date 类型数据、嵌套对象和键值对的对象 obj,然后创建 replacer 函数,将 obj 对象的 birth 属性转换成字符串,年月日之间用"-"分隔,输出的字符串用四个空格缩进。
结论
JSON.stringify() 方法是将 JavaScript 值序列化为 JSON 字符串的标准方法,它可以将 JavaScript 对象转换为 JSON 字符串,并允许通过控制如何序列化对象、数组和其他数据类型来扩展序列化过程。对于理解 JSON.stringify() 的使用,在 Web 开发和移动端开发中都非常有必要。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSON stringify方法原理及实例解析 - Python技术站