要件:jwtのオンライン解析ページを作成しました。jwtのコンテンツに長い型がある場合、デフォルトのJSONメソッドで解析すると精度が低下します。下の図に示されています:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus
JavaScriptには1種類の数字のみがあります。Numberは二重精度の浮動小数点数であり、多くのプログラミング言語とは異なり、整数、短、長、浮動小数点などの異なる種類の数値を定義していません。 したがって、JavaScriptでは数は整数型と浮動小数点型に分けられず、すべての数値は浮動小数点型です。
整数を表現する際、数は整数の範囲を[−2の53のべき乗、2の253のべき乗]を表すことができます。 なぜなら、Numberは8バイト64ビット(符号ビット1個、指数ビット11個、52個の仮数桁を含む)だからです。
Number.MAX_SAFE_INTEGERとNumber.MIN_SAFE_INTEGERを使って最大および最小安全整数を表示できます。
バックエンドインターフェースが型長のフィールドを返すと、フロントエンドはJSON.parse(text)を使って表示を非直列化し、表示エラーを引き起こします。解決策として、バックエンドインターフェースは型longのフィールドを文字列型に変換して返します。
lossless-jsonプロジェクトで、数値情報を失うリスクなくJSONを解析できます。 GitHubアドレス:ハイパーリンクのログインが見えます。
最初ですclone the lossless-json projectバンドルされミニファイドされたライブラリ(ES5、PCがインストールnode.js)を構築し、まず依存関係をインストールします:
次に、次のようにコンパイルします。
./dist/lossless-json.js これにより、ブラウザやnode.jsで実行可能なES5互換パッケージが生成されます。
ブラウザコンソールで以下のテスト結果を行った結果:
プロジェクトコードを修正し、lossless-json.jsファイルを導入する、JSONの直列化および逆直列化のためにLosslessJSONを呼び出し、精度の低下問題を修正しました、下図に示されているように:
let json = LosslessJSON.parse('{"foo":"bar"}'); {フー:『バー』} let text = LosslessJSON.stringify(json); 「{"foo":bar"}'
試験住所:ハイパーリンクのログインが見えます。
最後に、コンパイル済みのlossless-json.jsファイルを添付します:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ 答える (終わり) |