JSON-Verarbeitung in Go (Golang): Vollständige Anleitung mit Beispielen

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

JSON-Verarbeitung in Go (Golang): Vollständige Anleitung



Go (Golang) ist eine moderne, kompilierte Programmiersprache, die bei Google entwickelt wurde. Eine ihrer Stärken ist die integrierte Unterstützung des JSON-Formats über das Standardpaket encoding/json. Im Gegensatz zu vielen anderen Sprachen, bei denen die Installation von Drittanbieter-Bibliotheken erforderlich ist, ist die JSON-Verarbeitung in Go "out of the box" verfügbar und zeichnet sich durch hohe Leistung und strenge Typisierung aus.



In diesem Artikel werden wir alle Aspekte der Arbeit mit JSON in Go im Detail behandeln: vom einfachen Parsen bis hin zu komplexen Szenarien mit benutzerdefinierten Typen und Stream-Verarbeitung.



Grundlagen: Kodieren und Dekodieren von JSON



Das Paket encoding/json bietet zwei Hauptfunktionen: json.Marshal() zur Serialisierung von Go-Strukturen in JSON und json.Unmarshal() zur Deserialisierung von JSON zurück in Strukturen.



Beispiel: Serialisierung einer Struktur in JSON



package main

import ( "encoding/json" "fmt")

type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"`}

func main() { user := User{ Name: "Ivan Petrov", Age: 30, Email: "ivan@example.com", }

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

fmt.Println(string(jsonData)) // Ausgabe: {"name":"Ivan Petrov","age":30,"email":"ivan@example.com"}}


Beispiel: Deserialisierung von JSON in eine Struktur



func main() {    jsonString := `{"name":"Anna Smirnova","age":25,"email":"anna@example.com"}`        var user User    err := json.Unmarshal([]byte(jsonString), &user)    if err != nil {        fmt.Println("Deserialisierungsfehler:", err)        return    }

fmt.Printf("Name: %s, Alter: %d, E-Mail: %s", user.Name, user.Age, user.Email)}


Struktur-Tags (Struct Tags)



Struktur-Tags in Go ermöglichen die Steuerung, wie Felder in JSON serialisiert werden. Dies ist ein leistungsstarker Mechanismus zur Anpassung von Feldnamen, zum Überspringen leerer Werte und für andere Optionen.



Wichtige Tag-Optionen:



  • json:"name" — legt den Feldnamen in JSON fest
  • json:"-" — schließt das Feld vollständig aus JSON aus
  • json:"name,omitempty" — überspringt das Feld, wenn es einen Nullwert enthält (0, "", false, nil)
  • json:"name,string" — wandelt ein numerisches Feld zwangsweise in einen String um


Beispiel mit verschiedenen Tags:



type Product struct {    ID          int     `json:"id"`    Title       string  `json:"title"`    Description string  `json:"description,omitempty"`    Price       float64 `json:"price,string"`    SecretKey   string  `json:"-"`}

func main() { product := Product{ ID: 101, Title: "Laptop", Description: "", Price: 899.99, SecretKey: "sk-12345", }

jsonData, _ := json.MarshalIndent(product, "", " ") fmt.Println(string(jsonData)) // Ausgabe: // { // "id": 101, // "title": "Laptop", // "price": "899.99" // }}


Arbeit mit beliebigen JSON-Daten (interface{})



Manchmal ist die Struktur der JSON-Daten im Voraus unbekannt. In solchen Fällen kann der Typ interface{} oder map[string]interface{} verwendet werden.



func main() {    jsonString := `{"name":"Test","values":[1,2,3],"active":true,"metadata":{"version":2}}`        var data map[string]interface{}    err := json.Unmarshal([]byte(jsonString), &data)    if err != nil {        fmt.Println("Fehler:", err)        return    }

// Zugriff auf Werte mit Typumwandlung name := data["name"].(string) values := data["values"].([]interface{})

Empfehlungen