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 サイトの他の関連記事を参照してください。