JSON und CSV streamen
json.Decoder und encoding/csv für große Datenmengen
JSON und CSV streamen ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Streaming?
Das vollständige Laden großer JSON- oder CSV-Dateien in den Speicher führt zu einer hohen Heap-Nutzung. Streaming verarbeitet Datensätze einzeln und hält den Speicherverbrauch unabhängig von der Dateigröße konstant.
json.Decoder für Streaming
json.NewDecoder verpackt jeden io.Reader. Verwenden Sie Token(), um den JSON-Token-Stream zu durchlaufen, oder Decode in einer Schleife für JSON-Arrays.
dec := json.NewDecoder(file)
// consume opening [
for dec.More() {
var record Record
dec.Decode(&record)
process(record)
}Array-Anfang erkennen
Rufen Sie dec.Token() auf, um die öffnende Klammer vor der Decodierungsschleife zu konsumieren:
t, _ := dec.Token() // consume [
for dec.More() {
var r Record
dec.Decode(&r)
}Streaming über HTTP
Decodieren Sie JSON direkt aus dem Body einer HTTP-Antwort, ohne die gesamte Antwort zwischenzuspeichern:
resp, _ := http.Get(url)
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
for dec.More() {
var item Item
dec.Decode(&item)
process(item)
}encoding/csv-Reader
csv.NewReader liest CSV zeilenweise. Setzen Sie LazyQuotes, TrimLeadingSpace und Comment, um CSV-Varianten aus der Praxis zu verarbeiten.
r := csv.NewReader(file)
for {
record, err := r.Read()
if err == io.EOF { break }
if err != nil { return err }
process(record)
}CSV-Header überspringen
Lesen Sie den ersten Datensatz und verwerfen Sie ihn, um die Kopfzeile zu überspringen:
r.Read() // discard header
for {
record, err := r.Read()
if err == io.EOF { break }
}csv.Writer
Schreiben Sie CSV zeilenweise mit csv.NewWriter. Rufen Sie nach dem Schreiben immer w.Flush() auf und prüfen Sie w.Error().
w := csv.NewWriter(file)
w.Write([]string{"name", "age"})
w.Flush()
if err := w.Error(); err != nil { return err }Benutzerdefiniertes Trennzeichen
CSV-Dateien verwenden manchmal Semikolons oder Tabulatoren. Setzen Sie r.Comma auf das gewünschte Rune.
r := csv.NewReader(file)
r.Comma = ';' // semicolon-separatedJSON-Zeilen streamen (NDJSON)
Zeilengetrenntes JSON, also ein JSON-Objekt pro Zeile, lässt sich einfach streamen: Lesen Sie die Datei zeilenweise und unmarshalen Sie jede Zeile unabhängig voneinander.
scanner := bufio.NewScanner(file)
for scanner.Scan() {
var record Record
json.Unmarshal(scanner.Bytes(), &record)
}Speicherprofil beim Streaming
Beim Streaming bleibt die Heap-Allokierung bei O(record size) statt bei O(file size). Bei einer 1-GB-Datei mit Datensätzen von jeweils 1 KB verwendet Streaming etwa 1 KB statt etwa 1 GB beim Laden in den Arbeitsspeicher.
Kontextabbruch beim Streaming
Prüfen Sie innerhalb der Decodierungsschleife ctx.Done(), um das Streaming bei einem Abbruch des Kontexts zu beenden und zu verhindern, dass Goroutines bis zum EOF lesen.
for dec.More() {
select {
case <-ctx.Done():
return ctx.Err()
default:
}
dec.Decode(&record)
}Kurzer Test
Welchen Vorteil bietet das Streaming von JSON mit json.Decoder gegenüber json.Unmarshal?
Zusammenfassung: JSON- und CSV-Streaming
Wichtige Punkte:
- json.Decoder: Schleife mit dec.More() für JSON-Arrays
- csv.NewReader: zeilenweise Verarbeitung; setzen Sie Comma für benutzerdefinierte Trennzeichen
- NDJSON: bufio.Scanner + Unmarshal pro Zeile
- Beim Streaming bleibt der Speicherverbrauch unabhängig von der Dateigröße konstant
Häufig gestellte Fragen
Ist die Lektion „JSON und CSV streamen“ kostenlos?
Ja — der vollständige Text von „JSON und CSV streamen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „JSON und CSV streamen“?
json.Decoder und encoding/csv für große Datenmengen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „JSON und CSV streamen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Dateien mit os und bufio lesen
- Dateien und temporäre Dateien schreiben
- JSON-Kodierung und -Dekodierung
- JSON und CSV streamen