0Pricing
Go Academy · Lección

JSON y CSV en streaming

json.Decoder y encoding/csv para datos de gran tamaño

JSON y CSV en streaming es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

¿Por qué usar streaming?

Cargar archivos JSON o CSV grandes por completo en memoria provoca un uso elevado del heap. El procesamiento en streaming procesa los registros uno a uno y mantiene estable el uso de memoria, independientemente del tamaño del archivo.

json.Decoder para streaming

json.NewDecoder envuelve cualquier io.Reader. Use Token() para recorrer el flujo de tokens JSON o Decode dentro de un bucle para procesar arrays JSON.

dec := json.NewDecoder(file)
// consume opening [
for dec.More() {
    var record Record
    dec.Decode(&record)
    process(record)
}

Detección del inicio de un array

Llame a dec.Token() para consumir el corchete de apertura antes del bucle de decodificación:

t, _ := dec.Token() // consume [
for dec.More() {
    var r Record
    dec.Decode(&r)
}

Streaming desde HTTP

Decodifique JSON directamente desde el cuerpo de una respuesta HTTP sin almacenar en un búfer toda la respuesta:

resp, _ := http.Get(url)
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
for dec.More() {
    var item Item
    dec.Decode(&item)
    process(item)
}

lector de encoding/csv

csv.NewReader lee los registros CSV fila por fila. Configure LazyQuotes, TrimLeadingSpace y Comment para gestionar las variantes de CSV del mundo real.

r := csv.NewReader(file)
for {
    record, err := r.Read()
    if err == io.EOF { break }
    if err != nil { return err }
    process(record)
}

Omisión de la cabecera CSV

Lea y descarte el primer registro para omitir la fila de cabecera:

r.Read() // discard header
for {
    record, err := r.Read()
    if err == io.EOF { break }
}

csv.Writer

Escriba registros CSV fila por fila con csv.NewWriter. Llame siempre a w.Flush() y compruebe w.Error() después de escribir.

w := csv.NewWriter(file)
w.Write([]string{"name", "age"})
w.Flush()
if err := w.Error(); err != nil { return err }

Delimitador personalizado

Los archivos CSV a veces usan punto y coma o tabulaciones. Establezca r.Comma en la runa deseada.

r := csv.NewReader(file)
r.Comma = ';' // semicolon-separated

Líneas JSON en streaming (NDJSON)

El JSON delimitado por saltos de línea (un objeto JSON por línea) es sencillo de procesar en streaming: lea línea por línea y deserialice cada línea de forma independiente.

scanner := bufio.NewScanner(file)
for scanner.Scan() {
    var record Record
    json.Unmarshal(scanner.Bytes(), &record)
}

Perfil de memoria del streaming

Con el streaming, la asignación del heap se mantiene en O(tamaño del registro) en lugar de O(tamaño del archivo). Para un archivo de 1 GB con registros de 1 KB, el streaming utiliza aproximadamente 1 KB, frente a aproximadamente 1 GB al cargarlo en memoria.

Cancelación del contexto en el streaming

Compruebe ctx.Done() dentro del bucle de decodificación para cancelar el streaming cuando se cancele el contexto y evitar que las goroutines sigan leyendo hasta EOF.

for dec.More() {
    select {
    case <-ctx.Done():
        return ctx.Err()
    default:
    }
    dec.Decode(&record)
}

Comprobación rápida

¿Cuál es la ventaja de usar streaming para JSON con json.Decoder en lugar de json.Unmarshal?

Resumen: streaming de JSON y CSV

Puntos clave:

  • json.Decoder: use un bucle con dec.More() para arrays JSON
  • csv.NewReader: procesa fila por fila; establezca Comma para delimitadores personalizados
  • NDJSON: bufio.Scanner + Unmarshal por línea
  • El streaming mantiene estable el uso de memoria independientemente del tamaño del archivo

Preguntas frecuentes

¿La lección «JSON y CSV en streaming» es gratis?

Sí — el texto completo de «JSON y CSV en streaming» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «JSON y CSV en streaming»?

json.Decoder y encoding/csv para datos de gran tamaño Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «JSON y CSV en streaming»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Lectura de archivos con os y bufio
  2. Escritura de archivos y archivos temporales
  3. Codificación y decodificación de JSON
  4. JSON y CSV en streaming
← Volver a Go Academy