JSON.stringify()


JSON.stringify()

1. 简介

在 JavaScript 中,JSON 是一种用于数据交换的格式,它以文本的形式表示数据,易于阅读和编写,同时可以轻松地进行解析和生成。JSON.stringify() 方法用于将 JavaScript 对象转换为 JSON 字符串。

2. 语法

JSON.stringify(value[, replacer[, space]])

3. 参数

  • value: 必选参数,即要序列化为 JSON 字符串的值。
  • replacer: 可选参数,用于筛选需要序列化的属性,可以是一个函数或一个数组。
  • space: 可选参数,用于指定输出字符串的缩进,可以是一个整数或字符串。

4. 待序列化的对象

在使用JSON.stringify()方法时,我们需要注意待序列化的对象,该对象必须符合以下特征:

  1. JSON 对象
  2. 数组
  3. String
  4. Number
  5. Boolean
  6. null

5. replacer参数

replacer 参数用于指定序列化的属性,可以是一个函数或一个数组。

当 replacer 参数为函数时,它会在序列化对象时被调用,每个属性都会被函数接收并作为参数进行调用,函数返回值即为该属性的值,如果函数返回undefined,则不序列化当前属性。

如果 replacer 参数是一个数组,则仅序列化数组中包含的属性。

6. space参数

space 参数可以用于指定输出字符串的缩进,可以是一个整数或字符串。

当 space 参数为一个数字时,表示输出字符串缩进的空格数,比如:

JSON.stringify({a:1,b:{c:2}}, null, 4)

输出:

{
    "a": 1,
    "b": {
        "c": 2
    }
}

当 space 参数为字符串时,表示输出字符串缩进的符号,比如:

JSON.stringify({a:1,b:{c:2}}, null, '-')

输出:

{
-"a": 1,
-"b": {
--"c": 2
-}
}

7. 异常情况

  • 对象包含循环引用时,JSON.stringify()会抛出错误。
  • 当设置 replacer 参数为函数时,如果该函数返回值为 undefined,则该属性不会被序列化。
  • 当设置 replacer 参数为数组时,如果该数组中包含循环引用或非法属性,则会被忽略。

8. 示例:

  1. 输出默认结果
JSON.stringify({'name': 'Tom', 'age': 18});

输出:

{"name":"Tom","age":18}
  1. 使用 replacer 参数
var obj = {'name': 'Tom', 'age': 18, 'gender': 'male'};
JSON.stringify(obj, ['name', 'gender']);

输出:

{"name":"Tom","gender":"male"}
  1. 使用 space 参数
var obj = {'name': 'Tom', 'age': 18, 'gender': 'male'};
JSON.stringify(obj, null, 4);

输出:

{
    "name": "Tom",
    "age": 18,
    "gender": "male"
}

9. 总结

JSON.stringify() 方法将 JavaScript 对象转换为 JSON 字符串,具有很好的可读性和易解析性。我们可以通过 replacer 参数和 space 参数来过滤和格式化输出的内容。在使用该方法时,我们需要注意待序列化的对象必须符合 JSON 格式要求。