JSON.stringify({a:1,b:2,c:undefined})如何不忽略c


JSON.stringify({a:1,b:2,c:undefined});//'{"a":1,"b":2}'
如何JSON.stringify({a:1,b:2,c:undefined});//'{"a":1,"b":2,"c":""}'   
阅读 6.2k
3 个回答

重新定义 undefined 使之成为 ""
因为重新定义全局 undefined 可能引起其它问题,所以需要封装在一个函数范围内

var s = (function() {
    var undefined = "";
    return JSON.stringify({a:1,b:2,c:undefined});
})();

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

从js某个版本后,不能覆盖再undefined的值。

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

replacer 参数可以是一个函数或者是一个数组.如果是函数, 则该函数会被传入两个参数, 分别是当前正在被字符串化的键值对的键和值.
初始化时,一个默认的键值对(键为空,值为要 JSON 化的对象)会传入这个函数,然后,要 JSON 化的对象或者数组的每个键值对也会一级一级被传入这个函数.该函数的返回值会影响正在被字符串化的键值对会不会被加入最终生成的 JSON 字符串中化,如下:

  1. 如果返回一个 Number 类型的值,则该数字会通过 toString 方法转换成字符串,来作为正在被字符串化的键值对中的值被添加到 JSON 字符串中.

  2. 如果返回一个 String 类型的值, 则该字符串会作为正在被字符串化的键值对中的值被添加到 JSON 字符串中.

  3. 如果返回一个 Boolean 类型的值, 则该布尔值会转化成字符串"true"或"false",来作为正在被字符串化的键值对中的值被添加到 JSON 字符串中.

  4. 如果返回一个其他类型的对象, 则该对象的键值对会被递归的按照上述的规则添加到 JSON 字符串中, 但如果该对象是 function 类型的,则它不会变遍历. replacer 函数会转而处理下一个键值对.

  5. 如果返回 undefined, 则该键值对不会被添加到 JSON 字符串中.

JSON.stringify({ a: 1, b: 2, c: undefined }, function(k,v){
    if(v === undefined){
        return "";
    }else{
        return v;
    }
});
// {"a":1,"b":2,"c":""}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题