Codificar grandes flujos de datos con MarshalJSON sin cargar todos los objetos en la memoria
Querer codificar un gran flujo de datos usando json.Encoder sin cargar guardarlo todo en la memoria a la vez es un problema común. Desafortunadamente, el paquete encoding/json no proporciona soporte directo para esto.
Solución alternativa actual
La solución actual, como mencionaste, es crear manualmente la cadena JSON tú mismo. Esto implica escribir la estructura JSON pieza por pieza, a medida que los datos estén disponibles en la secuencia. Este es un enfoque eficiente, pero puede ser tedioso y propenso a errores.
Parche propuesto
Para mejorar este proceso, se podría modificar el paquete encoding/json. Específicamente, la función reflectValueQuoted en encoding/json/encode.go podría modificarse para manejar canales como matrices. Esto permitiría la transmisión directa de datos desde los canales a la salida JSON.
Aquí hay un cambio propuesto para el caso Array en reflectValueQuoted:
case reflect.Array:
e.WriteByte('[')
n := v.Len()
for i := 0; i 0 {
e.WriteByte(',')
}
e.reflectValue(v.Index(i))
}
e.WriteByte(']')
// Add the following case for channels:
case reflect.Chan:
e.WriteByte('[')
i := 0
for {
x, ok := v.Recv()
if !ok {
break
}
if i > 0 {
e.WriteByte(',')
}
e.reflectValue(x)
i
}
e.WriteByte(']')
Beneficios del parche
Este parche haría mucho más fácil codificar grandes flujos de datos sin cargar todos los objetos en la memoria. También eliminaría la necesidad de concatenación manual de cadenas, reduciendo el riesgo de errores y mejorando la legibilidad del código.
Conclusión
Aunque el parche propuesto no forma parte del parche actual paquete encoding/json, demuestra una mejora potencial que podría hacer que la transmisión de datos JSON sea más eficiente y conveniente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3