Qué ha pasado
Con el lanzamiento de Go 1.27, el paquete encoding/json/v2 y su complemento encoding/json/jsontext han alcanzado el estado estable y quedan abiertos al uso general, según informó Go. La publicación del 4 de noviembre de 2026 tuvo siete autores, entre ellos Joe Tsai, Damien Neil, Daniel Martí y Michael Pratt. Llega después de una versión experimental de la API presentada el año anterior, que se perfeccionó a partir de nuevos comentarios.
Los autores señalaron que el paquete original encoding/json ha demostrado ser flexible, pero arrastra defectos que los usuarios han señalado a lo largo de los años. Tolera UTF-8 inválido, algo que prohíbe la RFC 8259. También acepta objetos con nombres de miembro repetidos, una debilidad que los atacantes han aprovechado en el pasado, por ejemplo en CVE-2017-12635. Además, empareja los nombres de campo sin distinguir mayúsculas de minúsculas y codifica los slices y mapas nil como null.
Según la publicación, estos comportamientos no podían corregirse sin romper la promesa de compatibilidad de Go 1. Lo mismo ocurre con límites de rendimiento como almacenar valores enteros en memoria o las ralentizaciones cuadráticas cuando métodos personalizados llaman a Marshal o Unmarshal de forma recursiva. El nuevo diseño divide el trabajo en dos: jsontext se encarga de la sintaxis JSON sin depender de la reflexión, mientras que json/v2 asigna los valores JSON a tipos de Go.
Contexto
Go incluye soporte para JSON en su biblioteca estándar desde antes de Go 1.0, y los autores describen JSON como el formato de datos más utilizado de internet. Dado que los problemas provienen de la propia API existente, optaron por un espacio de nombres v2 independiente en lugar de añadir funciones paralelas como MarshalV2 dentro del paquete original. Una encuesta citada en la publicación concluyó que la mayoría de los usuarios de Go quiere que los slices y mapas nil se codifiquen como arrays u objetos vacíos.
El boletín
La semana tecnológica, en un solo correo.
Las crónicas que merecen su tiempo, cada semana. Cancele la suscripción cuando quiera.
