Organización de grandes flujos de datos en JSON sin cargarlos en la memoria
A menudo surge la necesidad de codificar grandes flujos de datos en JSON, pero cargar todo transmitir a la memoria a la vez puede resultar poco práctico. Este artículo explora formas de superar este desafío sin la interfaz json.Marshaler incorporada.
Codificación con json.Encoder: una limitación
Intentos de codificar una transmisión grande de datos con json.Encoder fallará debido a su incapacidad para manejar canales (cadena de canal) en la memoria.
Codificación JSON personalizada
En ausencia de una codificación adecuada -En la solución, se hace necesaria la codificación JSON personalizada. Esto implica crear manualmente la cadena JSON, como se demuestra en el siguiente fragmento:
w := os.Stdout w.WriteString(`{ "Foo": "` t.Foo `", "Bar": [`) for x := range t.Bar { _ = json.NewEncoder(w).Encode(x) w.WriteString(`,`) } w.WriteString(`]}`)
Extensión de codificación/json para compatibilidad con canales
Para mejorar el paquete encoding/json con compatibilidad con canales, puede modificar el valor reflectValueQuoted función en codificación/json/encode.go. Específicamente, agregue un caso para canales similar al siguiente:
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(']')
Conclusión
Si bien el paquete encoding/json actualmente no admite la codificación de canales, este artículo proporciona enfoques alternativos para ordenar grandes flujos de datos en JSON de manera eficiente. La codificación personalizada permite transmitir datos directamente a la salida JSON, mientras que ampliar la codificación/json ofrece una solución más sólida.
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