解析具有復活功能

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,沒有值或執行在函式末尾下降,則從物件中刪除該屬性。否則,將屬性重新定義為返回值。