複雑な JSON エンコード シナリオでは、ネストされた空の構造体が省略されるべきときにもエンコードされる状況に遭遇することがあります。スペースと効率の目的のため。たとえば、次のコード スニペットを考えてみましょう:
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A ColorGroup `json:",omitempty"` B string `json:",omitempty"` }
空の A フィールドを持つ Total のインスタンスで json.Marshal が使用される場合、出力 JSON には引き続き表示されます:
group := Total{ A: ColorGroup{}, // An empty ColorGroup instance } json.Marshal(group) // Output: {"A":{"Name":"","Colors":null},"B":null}
望ましい結果は、A フィールドを完全に省略することです:
{"B":null}
この問題に対処する鍵は、ポインターの使用にあります。 Total の A フィールドがポインターとして宣言されている場合、明示的に割り当てられていない場合は自動的に nil に設定され、空の構造体のエンコーディングの問題が解決されます。
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A *ColorGroup `json:",omitempty"` // Using a pointer to ColorGroup B string `json:",omitempty"` }
この変更により、json.Marshal の出力が空の A フィールドが正しく省略されるようになりました:
group := Total{ B: "abc", // Assigning a value to the B field } json.Marshal(group) // Output: {"B":"abc"}
以上がGoの「json.Marshal」で空のネストされた構造体を省略するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。