ホームページ >バックエンド開発 >Golang >Go で JSON をアンマーシャリングするときに、Void フィールドと未指定フィールドを区別するにはどうすればよいですか?

Go で JSON をアンマーシャリングするときに、Void フィールドと未指定フィールドを区別するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-09 02:35:10481ブラウズ

How Can I Differentiate Between Void and Unspecified Fields When Unmarshaling JSON in Go?

Go での JSON アンマーシャリング中の Void フィールドと未指定フィールドの認識

JSON では、次の場合に void 値と未指定フィールドを区別するのが難しい場合があります。データを Go 構造にアンマーシャリングします。

たとえば、次のことを考えてみましょう。 JSON:

[
  {"Name": "A", "Description": "Monotremata"},
  {"Name": "B"},
  {"Name": "C", "Description": ""}
]

次のように Go 構造を定義すると:

type Category struct {
  Name        string
  Description string
}

JSON をカテゴリ インスタンスのスライスにアンマーシャリングすると、次の出力が得られます:

[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]

B の description フィールドは空の文字列ですが、C の description フィールドは JSON から完全に省略されていることに注意してください。どちらの場合も、Go 表現では説明フィールドが空の文字列に設定されます。

これらのケースを区別するための 1 つの方法は、オプションのフィールドにポインターを使用することです。 description の型をポインターに変更することで、空の文字列値と nil 値 (未指定のフィールドを示す) を区別できます。

type Category struct {
  Name        string
  Description *string
}

この変更された構造に JSON をアンマーシャルすると、次のようになります。次の出力:

[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]

ご覧のとおり、B の description フィールドは nil になり、C の description フィールドはへのポインタになっています。空の文字列 (16 進数のメモリ アドレスで示される)。これにより、指定されていないフィールドを識別し、プログラム内でそれらを適切に処理できるようになります。

以上がGo で JSON をアンマーシャリングするときに、Void フィールドと未指定フィールドを区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。