JSON.stringify()
将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以选择性的替换值,或者如果指定了replacer是一个数组,可选择性的仅包含数组指定的属性。
语法:JSON.stringify(value[, replacer [, space]])
参数:
value
将要序列化成 一个JSON 字符串的值。
replacer
可选如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为null或者未提供,则对象所有的属性都会被序列化;关于该参数更详细的解释和示例,请参考使用原生的 JSON 对象一文。
space
可选指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;如果该参数没有提供(或者为null)将没有空格。
返回值:一个表示给定值的JSON字符串。
JSON.stringify()将值转换为相应的JSON格式:
- 转换值如果有toJSON()方法,该方法定义什么值将被序列化。
- 非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
- 布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
-
undefined、
任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null
(出现在数组中时)。函数、undefined被单独转换时,会返回undefined,如JSON.stringify(function(){})
or JSON.stringify(undefined).
- 对包含循环引用的对象(对象之间相互引用,形成无限循环)执行此方法,会抛出错误。
- 所有以 symbol 为属性键的属性都会被完全忽略掉,即便
replacer
参数中强制指定包含了它们。
- Date日期调用了toJSON()将其转换为了string字符串(同Date.toISOString()),因此会被当做字符串处理。
- NaN和Infinity格式的数值及null都会被当做null。
- 其他类型的对象,包括Map/Set/weakMap/weakSet,仅会序列化可枚举的属性。
-
1 JSON.stringify({}); // '{}'
2 JSON.stringify(true); // 'true'
3 JSON.stringify("foo"); // '"foo"'
4 JSON.stringify([1, "false", false]); // '[1,"false",false]'
5 JSON.stringify({ x: 5 }); // '{"x":5}'
6
7 JSON.stringify({x: 5, y: 6});
8 // "{"x":5,"y":6}"
9
10 JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
11 // '[1,"false",false]'
12