この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 8278|答える: 1

[JavaScript] フロントエンドのJSはJSONのシリアライゼーション精度の喪失を解決します

[リンクをコピー]
掲載地 2022/02/13 14:37:43 | | | |
要件: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ファイルを添付します:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ答える

(終わり)




先の:[実戦]。 NET/C#はStackExchangeを使ってキャッシュをエクスポートします。Redisのファジークエリ
次に:[プラクティス] Javaはhutoolの反射を使ってカスタム例外をキャッチできません
掲載地 2022/02/13 16:28:40 |
また学びに来た...
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com