ホームページ >バックエンド開発 >Golang >GoのJSONマーシャリングで空のネストされた構造体を省略するにはどうすればよいですか?

GoのJSONマーシャリングで空のネストされた構造体を省略するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-13 22:21:16273ブラウズ

How to Omit Empty Nested Structs in Go's JSON Marshaling?

JSON マーシャリングでの空のネストされたスタクトの省略

コンテキスト:

Go の JSON マーシャリングにより、構造体を JSON オブジェクトに変換できます。デフォルトでは、エクスポートされたすべての構造体フィールドが JSON 出力に含まれます。ただし、空のフィールドは、フィールド タグとして :",omitempty" を指定することで省略できます。

問題:

ネストされた構造体が空の場合 (つまり、ゼロがある場合)すべてのフィールドの値)、:",omitempty" が含まれている場合でも、JSON 出力に表示される可能性があります。 tag.

解決策:

空のネストされた構造体を省略するには、構造体へのポインターを使用する必要があります。そうすることで、ネストされた構造体の空の値は nil ポインターとみなされます。

説明:

Go ドキュメントより:

  • 構造体の値は JSON オブジェクトとしてエンコードされます。空の値には nil ポインターが含まれます。
  • omitempty タグは、nil ポインターを含む空の値に適用されます。

したがって、ネストされた構造体へのポインターを使用することで、それが考慮されるようになります。空の値なので、:",omitempty" タグが指定されている場合は JSON 出力から省略されます。

例:

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}

type Total struct {
    A *ColorGroup `json:",omitempty"`
    B string     `json:",omitempty"`
}

// Empty nested struct (zero values)
group := Total{
    B: "abc",
}

// Marshal group without nested struct (only "B" field included)
b, err := json.Marshal(group)
if err != nil {
    fmt.Println("error:", err)
}
os.Stderr.Write(b)

以上がGoのJSONマーシャリングで空のネストされた構造体を省略するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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