typestar

JSON en streaming en Go

Decoder y Encoder operan sobre un reader y un writer, un valor a la vez.

type Run struct {
    Lang string `json:"lang"`
    TPM  int    `json:"tpm"`
}

func decodeStream(input string) ([]Run, error) {
    decoder := json.NewDecoder(strings.NewReader(input))
    var runs []Run
    for {
        var run Run
        err := decoder.Decode(&run)
        if errors.Is(err, io.EOF) {
            return runs, nil
        }
        if err != nil {
            return nil, fmt.Errorf("decode: %w", err)
        }
        runs = append(runs, run)
    }
}

func strictDecode(input string) error {
    decoder := json.NewDecoder(strings.NewReader(input))
    decoder.DisallowUnknownFields()
    var run Run
    return decoder.Decode(&run)
}

Cómo funciona

  1. Un Decoder lee varios valores de un mismo stream.
  2. DisallowUnknownFields convierte una errata en un error.
  3. Esto es lo que usas para el cuerpo de una petición o un archivo grande.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
538
Tokens
139
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 83 segundos.

Escribe este fragmento

Paso 3 de 3 en Codificación; paso 3 de 26 en Biblioteca estándar y estructura del proyecto.

← Anterior Siguiente →