Arbeiten mit JSON in Go: Parsing und Serialisierung in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit JSON in Go: Parsing und Serialisierung in der Praxis



JSON (JavaScript Object Notation) ist eines der beliebtesten Datenformate für den Datenaustausch in der Webentwicklung. In der Sprache Go (Golang) wird die Arbeit mit JSON über das Standardpaket encoding/json realisiert, das leistungsstarke und praktische Werkzeuge für die Serialisierung (Umwandlung von Datenstrukturen in JSON) und Deserialisierung (Parsing von JSON in Go-Strukturen) bereitstellt. In diesem Artikel werden wir anhand praktischer Beispiele detailliert betrachten, wie man mit JSON in Go arbeitet.



Grundlagen: Serialisierung von Strukturen in JSON



Die gebräuchlichste Methode, um in Go mit JSON zu arbeiten, ist die Verwendung von Strukturen mit Tags. Tags ermöglichen es, Feldnamen in JSON festzulegen, die von den Feldnamen in Go abweichen können. Betrachten wir ein grundlegendes Beispiel der Serialisierung:



package main

import ( "encoding/json" "fmt")

type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` IsActive bool `json:"is_active"`}

func main() { user := User{ ID: 1, Name: "Ivan Petrov", Email: "ivan@example.com", IsActive: true, }

jsonData, err := json.Marshal(user) if err != nil { fmt.Println("Serialisierungsfehler:", err) return }

fmt.Println(string(jsonData)) // Ausgabe: {"id":1,"name":"Ivan Petrov","email":"ivan@example.com","is_active":true}}


Beachten Sie: Wir verwenden Tags json:"feldname", um die Schlüsselnamen in JSON zu steuern. Dies ist besonders praktisch, wenn bestimmte Namenskonventionen eingehalten werden müssen (z.B. snake_case in JSON und CamelCase in Go).



Parsing von JSON in Go-Strukturen



Die Deserialisierung (Parsing) von JSON-Daten in Strukturen erfolgt mit der Funktion json.Unmarshal. Wichtig ist, dass die Struktur der Struktur des JSON-Objekts entspricht. Fahren wir mit unserem Beispiel fort:



func main() {    jsonString := `{"id":2,"name":"Maria Sidorova","email":"maria@example.com","is_active":false}`

var user User err := json.Unmarshal([]byte(jsonString), &user) if err != nil { fmt.Println("Parsing-Fehler:", err) return }

fmt.Printf("ID: %d, Name: %s, Email: %s, Aktiv: %t", user.ID, user.Name, user.Email, user.IsActive) // Ausgabe: ID: 2, Name: Maria Sidorova, Email: maria@example.com, Aktiv: false}


Wichtig: Der Funktion json.Unmarshal wird immer ein Zeiger auf die Struktur übergeben (&user), sonst werden die Änderungen nicht gespeichert.



Arbeiten mit verschachtelten Strukturen und Arrays



Reale JSON-Daten enthalten oft verschachtelte Objekte und Arrays. Go ermöglicht es, solche Fälle elegant mit verschachtelten Strukturen zu behandeln:



type Address struct {    City    string `json:"city"`    Street  string `json:"street"`    ZipCode string `json:"zip_code"`}

type Employee struct { ID int `json:"id"` Name string `json:"name"` Skills []string `json:"skills"` Address Address `json:"address"`}

func main() { jsonData := `{ "id": 101, "name": "Alexei Ivanov", "skills": ["Go", "Python", "Docker"], "address": { "city": "Moskau", "street": "Twerskaja, 10", "zip_code": "101000" } }`

var emp Employee err := json.Unmarshal([]byte(jsonData), &emp) if err != nil { fmt.Println("Fehler:", err) return }

fmt.Printf("Mitarbeiter: %s, Stadt: %s, Fähigkeiten: %v", emp.Name, emp.Address.City, emp.Skills) // Ausgabe: Mitarbeiter: Alexei Ivanov, Stadt: Moskau, Fähigkeiten: [Go Python Docker]}


Für Arrays in Go werden Slices verwendet ([]string), und für verschachtelte Objekte separate Strukturen. Beim Parsen eines JSON-Arrays von Objekten kann

Blogs

Buchempfehlungen