ホームページ  >  記事  >  バックエンド開発  >  Goで「アンマーシャル」中にエラーフィールドをスキップするにはどうすればよいですか?

Goで「アンマーシャル」中にエラーフィールドをスキップするにはどうすればよいですか?

WBOY
WBOY転載
2024-02-09 09:00:20341ブラウズ

如何在 go 中的“Unmarshal”期间跳过错误字段?

Go 言語を使用した JSON デシリアライズ (アンマーシャル) のプロセスでは、処理できないエラー フィールドが発生することがあります。これらのエラー フィールドによりプログラムが終了し、コードの通常の実行に影響を与える可能性があります。では、アンマーシャル プロセス中にこれらのエラー フィールドをスキップする方法はあるのでしょうか?答えは「はい」です。この記事では、Go 言語のいくつかのテクニックを使用して、アンマーシャル中に発生したエラー フィールドをスキップする方法を紹介します。

質問内容

バイト配列を構造体に変換するためにjson.Unmarshal(body, OutputStruct)を使用しています。アンマーシャリング中にエラーが発生する場合があります。

たとえば、構造は次のとおりです:

リーリー

quantity を整数ではなく浮動小数点値として渡すと、エラーがスローされます。有効なフィールドのみをアンマーシャリングし、エラーのあるフィールドをスキップする方法を知りたいですか?

したがって、json をアンマーシャリングすると:

リーリー

構造から price 値を取得したいだけですが、数量は初期デフォルト値のままにします。

解決策

それはできません。

JSON に float が含まれている場合、それらを int にアンマーシャリングすることはできません。絶対です:###

    float64 を使用し、アンマーシャリング後のコードで非整数を処理する
  1. 自分のタイプに合わせて独自の UnmarshalJSON を作成します
  2. 2 段階のアンマーシャリングを実行します。一度 (
  3. "-") Quantity を無視して、失敗しないようにし、数量 (新しい構造) の 2 回目のアンマーシャリングのみを実行します。 ) エラーをグループ化して無視します。
  4. ###2は「最良の」方法ですが、「間違ったタイプのフィールドをスキップする」という背後にあるロジックが何なのかわかりません。数量が 2.5 の場合、数量の値はいくらになりますか? 0?なぜ?

以上がGoで「アンマーシャル」中にエラーフィールドをスキップするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。