Go 1.27 incorpora com a estables els nous paquets per a JSON, més estrictes i fins a deu vegades més ràpids en la lectura

Els paquets encoding/json/v2 i jsontext deixen de ser experimentals. Rebutgen l'UTF-8 invàlid i les claus duplicades, distingeixen majúscules i minúscules i processen el JSON en streaming. El paquet antic continua funcionant indefinidament, perquè ara s'implementa sobre el nou.

El projecte Go ha anunciat al seu blog que els paquets encoding/json/v2 i encoding/json/jsontext són estables a Go 1.27, després d'un any com a experiment. El paquet original, encoding/json, arrossegava defectes que no es podien corregir sense trencar la promesa de compatibilitat del llenguatge: acceptava UTF-8 invàlid i objectes amb noms de membre duplicats, un comportament que s'ha aprofitat en atacs com el CVE-2017-12635, i feia coincidir els camps sense distingir majúscules de minúscules.

La nova versió separa la sintaxi, que gestiona jsontext sense fer servir reflexió, de la correspondència amb els tipus de Go. Accepta opcions a totes les funcions i permet processar el JSON en streaming, és a dir, de mica en mica sense carregar-lo sencer a la memòria. La lectura és fins a deu vegades més ràpida, mentre que l'escriptura té un rendiment similar al de la versió anterior.

La versió 1 continuarà mantinguda indefinidament i ara s'implementa sobre la 2, de manera que tots dos paquets poden conviure en un mateix projecte. Cada canvi de comportament es pot configurar amb una opció, cosa que permet migrar el codi de manera gradual.