JSON-Verarbeitung in Go (Golang): encoding/json, Bibliotheken und Beispiele

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): Von der Standardbibliothek zu fortgeschrittenen Werkzeugen



JSON (JavaScript Object Notation) ist eines der beliebtesten Datenformate für den Datenaustausch. In Go (Golang) ist die Arbeit mit JSON auf höchstem Niveau umgesetzt, dank der leistungsstarken Standardbibliothek encoding/json und einer Vielzahl von Drittanbieter-Tools, die die Entwicklung beschleunigen und vereinfachen. In diesem Artikel werden wir im Detail besprechen, wie man JSON in Go serialisiert, deserialisiert, validiert und optimiert, sowie beliebte Bibliotheken vorstellen, die jeder Go-Entwickler kennen sollte.



Die Standardbibliothek encoding/json



encoding/json ist ein integriertes Go-Paket, das alle notwendigen Funktionen für die Arbeit mit JSON bereitstellt. Die wichtigsten Funktionen:



  • Marshalling (Serialisierung) — Umwandlung von Go-Strukturen in einen JSON-String.
  • Unmarshalling (Deserialisierung) — Parsen eines JSON-Strings in Go-Strukturen.
  • Stream-Verarbeitung — Lesen/Schreiben von JSON aus Streams (io.Reader, io.Writer).
  • Struktur-Tags — Steuerung von Feldnamen, Überspringen leerer Werte, Verschachtelung.


Beispiel für Marshalling und Unmarshalling



package main

import ( "encoding/json" "fmt" "log")

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

func main() { // Marshalling (Struktur -> JSON) user := User{ID: 1, Name: "Alexej", Email: "alex@example.com", IsActive: true} jsonData, err := json.Marshal(user) if err != nil { log.Fatal(err) } fmt.Println(string(jsonData)) // Ausgabe: {"id":1,"name":"Alexej","email":"alex@example.com","is_active":true}

// Unmarshalling (JSON -> Struktur) jsonStr := `{"id":2,"name":"Maria","email":"maria@example.com","is_active":false}` var user2 User err = json.Unmarshal([]byte(jsonStr), &user2) if err != nil { log.Fatal(err) } fmt.Printf("%+v", user2) // Ausgabe: {ID:2 Name:Maria Email:maria@example.com IsActive:false}}


Arbeit mit unstrukturierten Daten



Manchmal ist die JSON-Struktur im Voraus unbekannt. In diesem Fall kann man map[string]interface{} oder interface{} verwenden:



func main() {    jsonStr := `{"name":"Ivan","age":30,"hobbies":["lesen","sport"]}`    var data map[string]interface{}    err := json.Unmarshal([]byte(jsonStr), &data)    if err != nil {        log.Fatal(err)    }    fmt.Println(data["name"]) // Ivan    fmt.Println(data["hobbies"].([]interface{})[0]) // lesen}


Beliebte Drittanbieter-Bibliotheken



Obwohl encoding/json die meisten Aufgaben abdeckt, lohnt es sich für hochlastige Systeme oder spezifische Szenarien, Alternativen in Betracht zu ziehen:



1. easyjson

easyjson ist ein Code-Generator für schnelle Serialisierung/Deserialisierung. Es erstellt optimierte Funktionen für Ihre Strukturen, was eine Leistungssteigerung um das 2- bis 5-fache im Vergleich zur Standardbibliothek bringt.

  • Erfordert Code-Generierung mit easyjson.
  • Unterstützt benutzerdefinierte Typen und Verschachtelung.
  • Ideal für Microservices mit hohem RPS.


//go:generate easyjson -all user.gotype User struct {    ID   int    `json:"id"`    Name string `json:"name"`}

// Nach der Generierung verwenden: user.MarshalJSON() / user.UnmarshalJSON()


2. gjson

gjson ist eine Bibliothek zum schnellen Lesen von JSON ohne vollständige Deserialisierung. Ermöglicht das Abrufen von Werten über einen Pfad (analog zu jq):

import "github.com/tidwall/gjson"

func main() { json := `{"user":{"name":"Olga","age":25}}` name :=

Empfehlungen