この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
144. JSON data type以外のdata typeをserialize/deserializeする
function parse(string: string) {
return JSON.parse(
string,
(key, value) => {
if (typeof value === 'string' && /^([+\-]?\d+(?:\.\d+)?)([nbsf]|$)/.test(value)) {
// BigInt, NaN, Infinity, -Infinity を判別し正しい型に変換する
const [, numStr, type] = value.match(/^([+\-]?\d+(?:\.\d+)?)([nbsf]|$)/)!;
switch (type) {
case 'n':
return BigInt(numStr + 'n');
case 'b':
return NaN;
case 's':
return Infinity;
case 'f':
return -Infinity;
default:
return value;
}
}
return value;
}
);
}
function stringify(data: any) {
return JSON.stringify(
data,
(key, value) => {
if (typeof value === 'bigint') {
return value.toString() + 'n';
}
if (value === Infinity) {
return 'Infinity';
}
if (value === -Infinity) {
return '-Infinity';
}
if (Number.isNaN(value)) {
return 'NaN';
}
return value;
}
);
}
このコードでは、JSON.parse() と JSON.stringify() を使用します。JSON.stringify() は、BigInt、NaN、Infinity、-Infinityを対処するために変更されたカスタム関数を使用しています。JSON.parse() は、カスタム復号化関数を使用して、serializeされた値から正しい型に変換します。