解析具有复活功能

reviver 函数可用于过滤或转换正在解析的值。

Version >= 5.1

var jsonString = '[{"name":"John","score":51},{"name":"Jack","score":17}]';

var data = JSON.parse(jsonString, function reviver(key, value) {
  return key === 'name' ? value.toUpperCase() : value;
});

Version >= 6

const jsonString = '[{"name":"John","score":51},{"name":"Jack","score":17}]';

const data = JSON.parse(jsonString, (key, value) =>
  key === 'name' ? value.toUpperCase() : value
);

这会产生以下结果:

[
  {
    'name': 'JOHN',
    'score': 51
  },
  {
    'name': 'JACK',
    'score': 17
  }
]

当必须发送需要在使用 JSON 传输时进行序列化/编码的数据时,这尤其有用,但是想要对其进行反序列化/解码。在以下示例中,日期已编码为其 ISO 8601 表示。我们使用 reviver 函数在 JavaScript Date 中解析它。

Version >= 5.1

var jsonString = '{"date":"2016-01-04T23:00:00.000Z"}';

var data = JSON.parse(jsonString, function (key, value) {
  return (key === 'date') ? new Date(value) : value;
});

Version >= 6

const jsonString = '{"date":"2016-01-04T23:00:00.000Z"}';

const data = JSON.parse(jsonString, (key, value) =>
  key === 'date' ? new Date(value) : value
);

确保 reviver 函数在每次迭代结束时返回一个有用的值非常重要。如果 reviver 函数返回 undefined,没有值或执行在函数末尾下降,则从对象中删除该属性。否则,将属性重新定义为返回值。