ホームページ > バックエンド開発 > Golang > インターフェイスへのアンマーシャリング後に JSON 番号が切り捨てられる

インターフェイスへのアンマーシャリング後に JSON 番号が切り捨てられる

PHPz
リリース: 2024-02-10 09:48:08
転載
596 人が閲覧しました

JSON 数字在解组到接口后被截断

開発プロセスでは、データの送信に JSON 形式を使用することがよくあります。ただし、JSON データをインターフェイスにアンマーシャリングした後、数値データが切り捨てられる場合があります。これは非常によくある質問ですが、見落とされやすい質問です。この記事では、PHP エディターの Zimo が、この問題の原因と、デジタル データの完全性と正確性を確保するためにこの問題を回避および解決する方法を詳しく紹介します。

質問の内容

つまり、多くのフィールドを含むjsonがあり、提案どおりにそれをループしています JSONキーを効率的に変更する方法 必要のないキーをいくつか削除します。しかし、削除後、既存の JSON の元の値が変更され、それらの一部が浮動小数点のように見えたので、それを示すためにデモを作成しました。

この動作を変更するにはどうすればよいですか? interface{} が問題の原因ですか? 16843666532007445061684366653200744400 に切り捨てられるのはなぜですか?

###ありがとう!

https://go.dev/play/p/x2auwqwb2fl

参考までに、出力される json は 1684366653200744400

に変更されます。

2009/11/10 23:00:00 1684366653200744448.000000
2009/11/10 23:00:00 map[timestamp:1.6843666532007444e+18]
2009/11/10 23:00:00 json Marshal from maps of key string and value interface to batch json for insert to DB
2009/11/10 23:00:00 {"timestamp":1684366653200744400}
ログイン後にコピー

回避策

これは、デフォルトで、

encoding/json パッケージが json 番号のインターフェイス値に float64 を格納するためです。 json.unmarshal: を参照してください。

json をインターフェイス値にアンマーシャルするには、アンマーシャルは次のいずれかをインターフェイス値に保存します。

bool、json ブール値の場合
  • float64 (json 数値用)
  • ...
  • デコーダを作成して
(*decoder).usenumber

動作を変更できます: リーリー 参照

https://www.php.cn/link/3a6c2c9231df58107434b942fa600b22

.

以上がインターフェイスへのアンマーシャリング後に JSON 番号が切り捨てられるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート