JavaScript中JSON.stringify中的第二个参数

时间:2013-07-08 23:22:59

标签: javascript json function

在Javascript' JSON.stringify()函数中,我偶尔会看到以下语法:

JSON.stringify(obj, null, 4)

但是,我无法得到第二个参数null应该做的事情。只要我知道,上面的函数将一个对象作为其第一个参数,并将其转换为字符串变量。在这种情况下,第三个参数4缩进并漂亮打印结果字符串对象。但是,即使在我阅读官方文件的解释之后,我也看不出第二个论点试图做什么......那么论证的作用是什么?或者只是为了接受第三个论点? (但我认为函数应该同时使用参数名称及其参数,例如,JSON.stringify(obj, space=4)。我不确定Javascript中是否允许使用这种语法,所以请原谅我#&# 39;不是。但我一开始并不知道我的期望是正确的,所以无论如何都想提出一个问题。

感谢。

3 个答案:

答案 0 :(得分:14)

第二个参数可以是在字符串化时执行替换的函数。

null 或未定义的第二个参数表示您要使用标准 字符串化,没有任何自定义。

来自https://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_pa

  

从Firefox 3.5.4开始,JSON.stringify()提供了额外的功能   通过使用可选参数进行自定义功能。该   语法是:

     

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

     

value要转换为JSON字符串的JavaScript对象。

     

replacer一个改变字符串化过程行为的函数,或   一组String和Number对象,用作白名单   选择要包含在的值对象的属性   JSON字符串。如果此值为null或未提供,则为。的所有属性   该对象包含在生成的JSON字符串中。

     

space用于将空白插入输出的String或Number对象   用于可读性的JSON字符串。如果这是一个数字,它   表示用作空格的空格字符数;这个   如果数字大于10,则数字上限为10。值小于1   表明不应使用任何空间。如果这是String,则为字符串   (或者字符串的前10个字符,如果它长于那个字符)   用作空白区域。如果未提供此参数(或是   null),不使用空格。 replacer参数

     

replacer参数可以是函数,也可以是数组。作为一个   函数,它需要两个参数,键和值   字符串化。发现密钥的对象是作为   替换者这个参数。最初用空键调用它   表示正在进行字符串化的对象,然后调用它   对象或数组上的每个属性都是字符串化的。这应该   返回应添加到JSON字符串的值,如下所示:

     

如果返回Number,则该数字对应的字符串为   添加到JSON字符串时用作属性的值。如果   返回一个String,该字符串用作属性的值   将其添加到JSON字符串。如果你返回一个布尔值," true"要么   "假"在添加时适当地用作属性的值   它到JSON字符串。如果返回任何其他对象,则该对象为   以递归方式字符串化为JSON字符串,调用replacer   函数在每个属性上,除非对象是一个函数,在其中   大小写没有添加到JSON字符串。如果你返回undefined,那么   属性不包含在输出JSON字符串中。注意:你不能   使用replacer函数从数组中删除值。如果你   返回undefined或函数,然后使用null。

     

实施例

function censor(key, value) {
  if (typeof(value) == "string") {
    return undefined;
  }
  return value;
}

var foo = {foundation: "Mozilla", 
           model: "box", 
           week: 45, 
           transport: "car", 
           month: 7};
var jsonString = JSON.stringify(foo, censor);
The resulting JSON string is {"week":45,"month":7}.
  

如果replacer是一个数组,则数组的值表示该数组的名称   对象中应包含在生成的JSON中的属性   字符串。

答案 1 :(得分:11)

如果没有在JavaScript中传递第二个参数,则无法传递第三个参数 因此,当您需要传递null时,replacerspace函数的占位符。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

答案 2 :(得分:1)

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

替换器 的一种功能,用于改变字符串化过程的行为,或者是一个String和Number对象数组,用作选择/过滤对象属性的白名单。 JSON字符串中包含的value对象。如果此值为null或未提供,则对象的所有属性都将包含在结果JSON字符串中。

replacer参数可以是函数或数组。

作为函数,它具有两个参数:键和要字符串化的值。在其中找到密钥的对象作为替换者的this参数提供。

最初,使用一个空字符串作为键来表示替换对象函数,该字符串代表要被字符串化的对象。然后针对要字符串化的对象或数组上的每个属性调用它。