Rapport de veille

Go 1.27 : encoding/json/v2 et jsontext passent en version stable

Les nouveaux paquets JSON, publiés à titre expérimental un an plus tôt, visent des défauts anciens de justesse, de sécurité et de performance dans encoding/json.

INSIGHTEX Editorial Desk

2 min de lecture

Go 1.27 : encoding/json/v2 et jsontext passent en version stableRapport de veille

Ce qui s'est passé

Avec la version Go 1.27, le paquet encoding/json/v2 et son compagnon encoding/json/jsontext ont atteint le statut stable et sont ouverts à un usage général, a annoncé Go. L'article du 4 novembre 2026 compte sept auteurs, dont Joe Tsai, Damien Neil, Daniel Martí et Michael Pratt. Il fait suite à une version expérimentale de l'API introduite l'année précédente, affinée à la lumière de nouveaux retours.

Les auteurs expliquent que le paquet encoding/json d'origine s'est révélé flexible, mais qu'il présente des défauts que les utilisateurs signalent depuis des années. Il tolère l'UTF-8 invalide, ce que la RFC 8259 interdit. Il accepte aussi les objets contenant des noms de membres répétés, une faiblesse que des attaquants ont exploitée par le passé, par exemple dans la CVE-2017-12635. Par ailleurs, il fait correspondre les noms de champs sans tenir compte de la casse et encode les slices et maps nil en null.

Selon l'article, ces comportements ne pouvaient pas être corrigés sans rompre la promesse de compatibilité de Go 1. Il en va de même pour des limites de performance, comme la mise en mémoire tampon de valeurs entières et les ralentissements quadratiques lorsque des méthodes personnalisées appellent Marshal ou Unmarshal de manière récursive. La nouvelle conception répartit le travail en deux : jsontext gère la syntaxe JSON sans recourir à la réflexion, tandis que json/v2 fait correspondre les valeurs JSON aux types Go.

Contexte

Go propose la prise en charge de JSON dans sa bibliothèque standard depuis avant Go 1.0, et les auteurs décrivent JSON comme le format de données le plus utilisé sur internet. Les problèmes découlant de l'API existante elle-même, ils ont choisi un espace de noms v2 distinct plutôt que d'ajouter des fonctions parallèles comme MarshalV2 dans le paquet d'origine. Une enquête citée dans l'article a montré que la plupart des utilisateurs de Go souhaitent que les slices et maps nil soient encodés sous forme de tableaux ou d'objets vides.

SourceGo

Le briefing

La semaine tech, en un seul e-mail.

Les dépêches qui méritent votre temps, chaque semaine. Désinscription à tout moment.