ホームページ > バックエンド開発 > Golang > Go 構造体に小文字のフィールド名があると JSON エンコーディングが失敗するのはなぜですか?

Go 構造体に小文字のフィールド名があると JSON エンコーディングが失敗するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-26 11:27:18
オリジナル
589 人が閲覧しました

Why Does JSON Encoding Fail with Go Structs Having Lowercase Field Names?

Go でフィールド名が小文字の構造体の JSON エンコーディングが失敗するのはなぜですか?

Go では、構造体のフィールドはパッケージでのみ表示されます最初の文字が大文字かどうかが定義されています。以下に示すように、小文字のフィールド名を使用して構造体をエンコードしようとすると、空の JSON 出力が生成されます。

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

func main() {
  m := &Machine{m_ip: "test", m_type: "test", m_serial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{}"
}
ログイン後にコピー

これは、フィールドが最初に小文字であるために json.Marshal 関数に表示されないために発生します。手紙。ただし、次のようにフィールド名を大文字に変更すると、JSON エンコードが成功します。

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}

func main() {
  m := &Machine{MachIp: "test", MachType: "test", MachSerial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{\"MachIp\":\"test\",\"MachType\":\"test\",\"MachSerial\":\"test\"}"
}
ログイン後にコピー

小文字のフィールド名で構造体をエンコードするには、目的の JSON キーでフィールドにタグを付けることができます。例:

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

func main() {
  m := &Machine{MachIp: "test", MachType: "test", MachSerial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{\"m_ip\":\"test\",\"m_type\":\"test\",\"m_serial\":\"test\"}"
}
ログイン後にコピー

必要な JSON キーでフィールドをタグ付けすると、構造体を小文字のフィールド名でエンコードできるため、特定のシナリオでより便利になります。

以上がGo 構造体に小文字のフィールド名があると JSON エンコーディングが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート