Go:
Arbeiten mit JSON
Wie:
In Go ist das Paket encoding/json
Ihr Tor zur JSON-Manipulation und bietet Mechanismen, um Go-Datenstrukturen zu JSON (Marshalling) und zurück (Unmarshalling) zu konvertieren. Unten finden Sie grundlegende Beispiele, um zu beginnen:
Kodierung (Marshalling)
Um eine Go-Struktur in JSON umzuwandeln, können Sie json.Marshal
verwenden. Betrachten Sie die folgende Go-Struktur:
package main
import (
"encoding/json"
"fmt"
"log"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Languages []string `json:"languages"`
}
func main() {
user := User{1, "JohnDoe", []string{"Go", "JavaScript", "Python"}}
userJSON, err := json.Marshal(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(userJSON))
}
Ausgabe:
{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}
Dekodierung (Unmarshalling)
Um JSON in eine Go-Datenstruktur zu parsen, verwenden Sie json.Unmarshal
:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
jsonStr := `{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}`
var user User
err := json.Unmarshal([]byte(jsonStr), &user)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", user)
}
Angesichts der Struktur User
wie zuvor, wandelt dieser Code die JSON-Zeichenkette in eine User-Instanz um.
Ausgabe:
{ID:1 Username:JohnDoe Languages:[Go JavaScript Python]}
Vertiefung
Das Paket encoding/json
in Go bietet eine einfache API, die einen Großteil der Komplexität bei der JSON-Manipulation abstrahiert. Früh in der Entwicklung von Go eingeführt, spiegelt dieses Paket die Philosophie von Einfachheit und Effizienz in Go wider. Allerdings kann die Verwendung von Reflection durch encoding/json
, um Strukturen zur Laufzeit zu inspizieren und zu modifizieren, zu einer weniger als optimalen Leistung in CPU-intensiven Szenarien führen.
Alternativen wie json-iterator/go
und ffjson
sind aufgetaucht und bieten eine schnellere JSON-Verarbeitung, indem statischer Marshalling- und Unmarshalling-Code erzeugt wird. Jedoch bleibt encoding/json
das am häufigsten verwendete Paket aufgrund seiner Einfachheit, Robustheit und der Tatsache, dass es Teil der Standardbibliothek ist, was Kompatibilität und Stabilität über Go-Versionen hinweg gewährleistet.
Trotz seiner relativ langsameren Leistung macht die Benutzerfreundlichkeit und die Integration in das Go-Typsystem encoding/json
für die meisten Anwendungen geeignet. Für diejenigen, die in Kontexten arbeiten, in denen Leistung von höchster Bedeutung ist, könnte die Erforschung externer Bibliotheken lohnenswert sein, aber für viele bietet die Standardbibliothek die richtige Balance zwischen Geschwindigkeit, Einfachheit und Zuverlässigkeit.