ビギンとJSON.Stringify/JSONパース
8068 ワード
この文書の中で
次のように想像してください
直列化と逆シリアル化
それはあなたのbigintsをシリアル化する方法を選択する方法をあなたのbigintsを逆シリアル化に影響を与えることに注意する必要があります.一般的には、“init”の末尾に“n”接尾辞を追加することで、それらをシリアル化します.(
連載
ここでは
逆シリアル化
我々が上に持っているものを逆シリアル化するために、我々は2番目の引数を
ここでは、値の型と形をテストして、それが続く数の束と一致することを確認します
代替連載
これはすべての少しトリッキーなので、あなたの他のデータのどれも、それが数字の束と1の形式であることを確認する必要があります
JSON.parse
新しいJavaScriptタイプをシリアル化できませんBigInt
.次のように想像してください
const data = {
value1: BigInt('1231231231231231213'),
deep: {
// NOTE the "n" at the end -- also a BigInt!
value2: 848484848484848484884n,
}
}
あなたがちょうど試みるならばJSON.stringify(data)
エラーが出ますTypeError: Do not know how to serialize a BigInt
.直列化と逆シリアル化
それはあなたのbigintsをシリアル化する方法を選択する方法をあなたのbigintsを逆シリアル化に影響を与えることに注意する必要があります.一般的には、“init”の末尾に“n”接尾辞を追加することで、それらをシリアル化します.(
BigInt(0)
and 0n
も同じ結果を返す).連載
ここでは
JSON.stringify
's番目の引数null
!!! ハハ.これはreplacer
. 提供されるならば、この機能の仕事はそれのキーと値から何かに基づいて何かを直列化する方法を決定することです.If the typeof
the value
is "bigint"
, 我々はそれを文字列に変換し、タック"n"
最後まで.// Serialization
const json = JSON.stringify(data, (key, value) =>
typeof value === "bigint" ? value.toString() + "n" : value
);
結果:json
は{
"value1": "1231231231231231213n",
"deep": {
"value2": "848484848484848484884n",
}
}
逆シリアル化
我々が上に持っているものを逆シリアル化するために、我々は2番目の引数を
JSON.parse()
. (私はほとんどの人が2番目の引数を持っていることを知りませんでしたreviver
, そして、それは仕事の基本的に反対のreplacer
上記.ここでは、値の型と形をテストして、それが続く数の束と一致することを確認します
"n"
.// Deserialize
const backAgain = JSON.parse(json, (key, value) => {
if (typeof value === "string" && /^\d+n$/.test(value)) {
return BigInt(value.substr(0, value.length - 1));
}
return value;
});
代替連載
これはすべての少しトリッキーなので、あなたの他のデータのどれも、それが数字の束と1の形式であることを確認する必要があります
"n"
最後に.もしそうなら、シリアル化戦略を変更する必要があります.たとえば、おそらくあなたはBigInt::1231232123
以下の例のように、反対側で同じように逆シリアル化します.// Serialize
const json = JSON.stringify(data, (key, value) =>
typeof value === "bigint" ? `BIGINT::${value}` : value
);
// Deserialize
const backAgain = JSON.parse(json, (key, value) => {
if (typeof value === "string" && value.startsWith('BIGINT::')) {
return BigInt(value.substr(8));
}
return value;
});
選択は本当にあなたに、ちょうどあなたがそれを行うためのツールを持っている限りです.Reference
この問題について(ビギンとJSON.Stringify/JSONパース), 我々は、より多くの情報をここで見つけました https://dev.to/benlesh/bigint-and-json-stringify-json-parse-2m8pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol