Heim >Backend-Entwicklung >Golang >Warum erzeugt meine Go-Struktur beim Marshalling ein leeres JSON-Objekt?

Warum erzeugt meine Go-Struktur beim Marshalling ein leeres JSON-Objekt?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-26 00:28:10987Durchsuche

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

JSON-Marshalling in Go: Groß-/Kleinschreibung von Strukturfeldern

Beim Versuch, JSON aus einer Struktur in Go zu generieren, kann es zu unerwarteten Ergebnissen kommen wenn die Felder der Struktur mit Kleinbuchstaben beginnen. Betrachten Sie die folgende Struktur:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

Das Marshalling dieser Struktur an JSON führt zu einem leeren JSON-Objekt {}. Dies liegt daran, dass Go vereinbarungsgemäß die Groß-/Kleinschreibung eines Bezeichners verwendet, um seine Sichtbarkeit innerhalb eines Pakets zu bestimmen. Indem Sie die Feldnamen mit Kleinbuchstaben beginnen, werden sie als privat markiert und sind für die json.Marshal-Funktion unzugänglich.

Um dieses Problem zu beheben, können Sie die Feldnamen entweder öffentlich machen, indem Sie den ersten Buchstaben jedes Wortes groß schreiben :

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}

Oder, wenn man Feldnamen in Kleinbuchstaben in der JSON-Ausgabe verwenden möchte, kann man Tags verwenden, um das gewünschte JSON anzugeben Namen:

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

Durch die Verwendung von Tags kann man die JSON-Feldnamen anpassen und gleichzeitig die Privatsphäre der Strukturfelder in Go wahren.

Das obige ist der detaillierte Inhalt vonWarum erzeugt meine Go-Struktur beim Marshalling ein leeres JSON-Objekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn