Einführung in die Arbeit mit JSON in Go
JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat, das häufig in der Webentwicklung, bei APIs und in Konfigurationsdateien verwendet wird. Die Sprache Go (Golang) bietet das integrierte Paket encoding/json, mit dem Sie Daten einfach parsen (decodieren) und serialisieren (codieren) können. In diesem Artikel werden wir die Grundlagen der Arbeit mit JSON in Go anhand praktischer Beispiele erläutern, die auch für Anfänger verständlich sind.
Grundlagen des Pakets encoding/json
Das Paket encoding/json ist eine Standardbibliothek von Go, die keine zusätzliche Installation erfordert. Die beiden wichtigsten Werkzeuge in diesem Paket sind die Funktionen json.Marshal (Serialisierung) und json.Unmarshal (Deserialisierung).
Strukturen und JSON-Tags
In Go werden Daten normalerweise als Strukturen (struct) dargestellt. Zur Steuerung der Feldnamen in JSON werden Tags verwendet. Betrachten wir ein einfaches Beispiel:
package main
import ( "encoding/json" "fmt")
// Definieren einer Struktur mit JSON-Tagstype Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` IsAdmin bool `json:"is_admin"`}
func main() { // Erstellen einer Instanz der Struktur person := Person{ Name: "Ivan Petrov", Age: 30, Email: "ivan@example.com", IsAdmin: true, } // Serialisieren in JSON jsonData, _ := json.Marshal(person) fmt.Println(string(jsonData))}Ergebnis der Ausführung:
{"name":"Ivan Petrov","age":30,"email":"ivan@example.com","is_admin":true}Wichtige Punkte:
- Das Tag
json:"name"gibt an, wie das Feld im JSON heißen wird - Die Option
omitemptyüberspringt leere Felder (Nullwerte) - Strukturfelder müssen exportierbar sein (mit einem Großbuchstaben beginnen)
Serialisierung (Marshal) von Daten in JSON
Serialisierung ist der Prozess der Umwandlung einer Go-Struktur oder eines anderen Datentyps in einen JSON-String. Die Funktion json.Marshal gibt ein Byte-Slice ([]byte) und einen Fehler zurück.
Beispiele für die Serialisierung verschiedener Typen
package main
import ( "encoding/json" "fmt")
type Product struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"` Tags []string `json:"tags,omitempty"` InStock bool `json:"in_stock"`}
func main() { // Serialisierung einer Struktur product := Product{ ID: 101, Name: "Laptop", Price: 79999.99, Tags: []string{"Elektronik", "Laptops"}, InStock: true, } // Schöne Ausgabe mit Einrückungen jsonData, _ := json.MarshalIndent(product, "", " ") fmt.Println(string(jsonData)) // Serialisierung eines Slices von Strukturen products := []Product{ {ID: 1, Name: "Maus", Price: 1500.00, InStock: true}, {ID: 2, Name: "Tastatur", Price: 3500.00, InStock: false}, } jsonArray, _ := json.Marshal(products) fmt.Println(string(jsonArray))}Ergebnis:
{ "id": 101, "name": "Laptop", "price": 79999.99, "tags": [ "Elektronik", "Laptops" ], "in_stock": true}[{"id":1,"name":"Maus","price":1500,"in_stock":true},{"id":2,"name":"Tastatur","price":3500,"in_stock":false}]Parsing (Unmarshal) von JSON in Go
Parsing ist der umgekehrte Prozess: die Umwandlung eines JSON-Strings in eine Go-Struktur. Dazu wird die Funktion json.Unmarshal verwendet.
Basisbeispiel für Parsing
package main
import ( "encoding/json" "fmt" "log")
type User struct { Username string `json:"username"` Age