【问题标题】:JSON parse reviverJSON解析恢复器
【发布时间】:2021-02-04 20:12:07
【问题描述】:

我正在尝试使用 reviver 函数将 JSON 对象列表解析为名为 jsonStructure 的变量,该函数将 5 添加到 stringData 变量中的“年份”对象。但是,该变量返回未定义。我不确定我做错了什么,因为我的解析器设置与书中设置的完全一样。下面是我的代码:

var stringData = '{ "year": 2011, "month": 8, "day": 9, "hour": 5, "minute": 32 }';

var jsonStructure = JSON.parse(stringData, function (key, value) {
   if (key == "year")
      return value + 5;
});

【问题讨论】:

    标签: javascript reviver-function


    【解决方案1】:

    问题

    这里的问题是,如果键与 year 不匹配,则您不会返回任何值,从而有效地使其他所有内容都未定义

    解决方案

    我们需要始终确保从我们的 reviver 中返回一个值:

    var stringData = '{ "year": 2011, "month": 8, "day": 9, "hour": 5, "minute": 32 }';
    
    var jsonStructure = JSON.parse(stringData, function (key, value) {
      return key == "year" ? value + 5 : value;
    });
    
    
    console.log(jsonStructure)

    说明

    来自MDN documentation 网站:

    使用 reviver 参数

    如果指定了reviver,则解析计算的值在返回之前进行转换。具体来说,计算值及其所有属性(从最嵌套的属性开始并继续到原始值本身)分别通过 reviver 运行。然后调用它,包含正在处理的属性的对象作为 this,属性名称作为字符串,属性值作为参数。如果 reviver 函数返回 undefined(或不返回值,例如,如果执行超出函数末尾),则从对象中删除该属性。否则,该属性被重新定义为返回值。

    【讨论】:

      【解决方案2】:

      var stringData = '{ "year": 2011, "month": 8, "day": 9, "hour": 5, "minute": 32 }';
      
      var jsonStructure = JSON.parse(stringData, function(key, value) {
        if (key == "year") {
          return value + 5;
        }
        return value
      });
      
      console.log(jsonStructure);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 2019-06-30
        • 2012-09-16
        • 2014-10-31
        • 1970-01-01
        相关资源
        最近更新 更多