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