ホームページ >バックエンド開発 >Golang >Go 構造体がマーシャリング時に空の JSON オブジェクトを生成するのはなぜですか?

Go 構造体がマーシャリング時に空の JSON オブジェクトを生成するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-26 00:28:10986ブラウズ

Why Does My Go Struct Produce an Empty JSON Object When Marshalling?

Go での JSON マーシャリング: 構造体フィールドの大文字と小文字の区別

Go で構造体から JSON を生成しようとすると、予期しない結果が発生する可能性があります構造体のフィールドが小文字で始まる場合。次の構造体について考えてみましょう:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

この構造体を JSON にマーシャリングすると、空の JSON オブジェクト {} が生成されます。これは、慣例により、Go はパッケージ内での可視性を決定するために識別子の大文字と小文字を使用するためです。フィールド名を小文字で始めると、フィールド名がプライベートとしてマークされ、json.Marshal 関数にアクセスできなくなります。

この問題を解決するには、各単語の最初の文字を大文字にしてフィールド名をパブリックにすることができます。 :

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}

または、JSON 出力で小文字のフィールド名を使用したい場合は、タグを使用して目的の JSON を指定できます。 names:

type Machine struct {
  MachIp     string `json:"m_ip"`
  MachType   string `json:"m_type"`
  MachSerial string `json:"m_serial"`
}

タグを使用すると、Go の構造体フィールドのプライバシーを維持しながら JSON フィールド名をカスタマイズできます。

以上がGo 構造体がマーシャリング時に空の JSON オブジェクトを生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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