JSON.stringify()

184 阅读2分钟

JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。

语法

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

参数说明:

value:

必需, 要转换的 JavaScript 值(通常为对象或数组)。

replacer:

可选。用于转换结果的函数或数组。

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

如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。

space:

可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。

1、如果第二个参数存在,并且第二个参数是函数

  let obj = { name: "guodandan", age: 12, sex: "女" };
  function replacer(key, value) {
    if (key === "age") {
      return value + 10;
    } else {
      return value;
    }
  }
  console.log(JSON.stringify(obj, replacer, 1));
  console.log(obj);
  

最后的输出结果:
image.png 函数可以帮我们做一些操作,让我们返回指定的形式。

例如下面:我们可以过滤掉一些null或者undefined的数据

  let obj = {
    name: "guodandan",
    age: 12,
    sex: "女",
    a: undefined,
    b: null,
    c: "",
  };
  function replacer(key, value) {
    if (value) {
      return value;
    }
  }
  console.log(JSON.stringify(obj, replacer, 1));
  console.log(obj);

返回结果: image.png

2、如果第二个参数存在,并且是数组,第一个参数也是数组

//我试验的结果是只返回了第一个数组的值

  var arr = ["a", "b", "c"];
  var arr2 = [1, 2, 3, 4, 5];
  console.log(JSON.stringify(arr, arr2));
  

image.png

3、如果第二个参数存在,是数组,并且第一个参数也存在,是正常的对象

  let obj = {
    name: "guodandan",
    age: 12,
    sex: "女",
    a: undefined,
    b: null,
    c: "",
  };
  console.log(JSON.stringify(obj, ["sex", "a", "name", "b"], 1));
  console.log(obj);
  

那么如果第二个的value在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示 image.png

4、第三个参数:如果省略的话,那么显示出来的值 就没有分隔符,直接输出来

  let obj = {
    name: "guodandan",
    age: 12,
    sex: "女",
    a: undefined,
    b: null,
    c: "",
  };
  console.log(JSON.stringify(obj, ["sex", "a", "name", "b"]));
  
  

image.png

5、第三个参数:如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.

image.png

6、第三个参数:如果是一些转义字符,比如“\r”,表示回车,那么它每行一个回车

image.png

7、第三个参数:如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。

console.log(JSON.stringify(obj, ["sex", "a", "name", "b"], 'HelloGdd'));

image.png