用JSON.stringify()转换字符串时加过滤函数只保留数值项

JSON.stringify()转换字符串时,我们可以加一个过滤函数,最终返回的结果只保留数值项,或某些特定内容的项。

这个功能非常好用,因为我们有时并不需要所有的字符串结果,我们更想直接得到我们想要的内容。

这就是使用了 replacer 方法。

例子(function)

function replacer(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, replacer);

结果为

{“week”:45,”month”:7}

从这个结果,我们成功只保留了我们想要的内容项,把不需要的项移除了。

replacer参数

replacer 参数可以是一个函数或者一个数组。作为函数,它有两个参数,键(key)和值(value),它们都会被序列化。

在开始时, replacer 函数会被传入一个空字符串作为 key 值,代表着要被 stringify 的这个对象。随后每个对象或数组上的属性会被依次传入。

函数应当返回JSON字符串中的value, 如下所示:

  • 如果返回一个 Number,转换成相应的字符串作为属性值被添加入 JSON 字符串。
  • 如果返回一个 String,该字符串作为属性值被添加入 JSON 字符串。
  • 如果返回一个 Boolean, “true” 或者 “false” 作为属性值被添加入 JSON 字符串。
  • 如果返回任何其他对象,该对象递归地序列化成 JSON 字符串,对每个属性调用 replacer 方法。除非该对象是一个函数,这种情况将不会被序列化成 JSON 字符串。
  • 如果返回 undefined,该属性值不会在 JSON 字符串中输出。

注意:不能用 replacer 方法,从数组中移除值(values),如若返回 undefined 或者一个函数,将会被 null 取代。

例子(array)

如果 replacer 是一个数组,数组的值代表将被序列化成 JSON 字符串的属性名。

JSON.stringify(foo, ['week', 'month']);
// '{"week":45,"month":7}', 只保留 “week” 和 “month” 属性值。

您可能对以下文章也感兴趣

  • 15个JSON.stringify()参考示例
  • 详解JSON.stringify()与JSON.parse()转换JSON对象和字符串
  • 两种方法Javascript访问JSON(含嵌套)数据
  • 介绍两种方法JS读取 .JSON 文件【实例演示/源码下载】
  • 表单序列化插件serializeJSON.js下载及使用示例
  • JQuery如何把JSON字符串转为JSON对象