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

Posted

技术标签:

【中文标题】JavaScript 中 JSON.stringify 中的第二个参数【英文标题】:Second argument in JSON.stringify in JavaScript 【发布时间】:2013-07-06 10:20:20 【问题描述】:

javascriptJSON.stringify() 函数中,我偶尔会看到如下语法:

JSON.stringify(obj, null, 4)

但是,我不知道第二个参数 null 应该做什么。据我所知,上述函数将一个对象作为其第一个参数,并将其转换为字符串变量。在这种情况下,第三个参数 4 缩进并漂亮地打印结果字符串对象。但是即使我阅读了官方文档上的解释,我也看不到第二个论点试图做什么......那么这个论点是做什么的呢?还是只是为了接受第三个论点? (但我认为该函数应该同时采用参数名称及其参数,例如JSON.stringify(obj, space=4)。我不确定 JavaScript 中是否允许这种语法,如果不是,请原谅我。但我不知道'首先不知道我的期望是正确的,所以还是想提出一个问题)。

谢谢。

【问题讨论】:

【参考方案1】:

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

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

space 一个字符串或数字对象,用于在输出中插入空格 出于可读性目的的 JSON 字符串。如果这是一个数字,它 指示用作空格的空格字符数;这 如果大于该数字,则数字上限为 10。小于 1 的值 表示不应使用空格。如果这是一个字符串,则该字符串 (或字符串的前 10 个字符,如果它比那个长) 用作空白。如果未提供此参数(或 null),不使用空格。替换参数

replacer 参数可以是函数或数组。作为一个 函数,它有两个参数,键和值是 字符串化。找到密钥的对象被提供为 replacer 的这个参数。最初它被一个空键调用 表示被字符串化的对象,然后调用它 被字符串化的对象或数组的每个属性。这应该 返回应该添加到 JSON 字符串的值,如下所示:

如果返回一个数字,则对应于该数字的字符串是 添加到 JSON 字符串时用作属性的值。如果 您返回一个字符串,该字符串用作属性的值 将其添加到 JSON 字符串中。如果你返回一个布尔值,“真”或 在添加时,酌情使用“false”作为属性的值 它到 JSON 字符串。如果您返回任何其他对象,则该对象是 递归字符串化为 JSON 字符串,调用替换器 函数对每个属性,除非对象是一个函数,其中 情况下没有任何内容添加到 JSON 字符串中。如果返回未定义,则 属性不包含在输出 JSON 字符串中。注意:您不能 使用 replacer 函数从数组中删除值。如果你 return 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 中的属性 字符串。

【讨论】:

【参考方案2】:

在 JavaScript 中不传递第二个参数就无法传递第三个参数。 所以nullreplacer函数的占位符,当你需要传递space时。

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

【讨论】:

【参考方案3】:
   JSON.stringify(value[, replacer[, space]])

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

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

作为一个函数,它有两个参数:键和被字符串化的值。找到密钥的对象作为替换器的 this 参数提供。

最初,replacer 函数以一个空字符串作为键来调用,表示正在字符串化的对象。然后为正在字符串化的对象或数组上的每个属性调用它。

【讨论】:

以上是关于JavaScript 中 JSON.stringify 中的第二个参数的主要内容,如果未能解决你的问题,请参考以下文章

JS ES5

js将两个json合并成一个,有啥好的方法

读取图片上传响应

前端存储loaclForage

fetch函数的使用-常见问题

javascript中直接写php代码的方法