Une nouvelle API Go pour JSON

Par:
francoistonic

mar, 09/09/2025 - 17:30

JSON est un format d'échange de données qui fait référence. Go, comme tous les autres langages, sérialise et désérialise les fichiers JSON. C'est même un des packages Go les plus utilisés. Dans Go 1.25, une nouvelle API JSON est proposée en version expérimentale pour encoder, décoder json/v2 et jsontext. Si le support JSON est plutôt bon, des lacunes ont été remontées. Par exemple, la gestion parfois imprécèse de la syntaxe JSON. "Au fil des ans, JSON a connu une standardisation accrue afin de permettre aux programmes de communiquer correctement. En général, les décodeurs sont devenus plus stricts dans le rejet des entrées ambiguës, afin de réduire le risque que deux implémentations interprètent différemment (et avec succès) une valeur JSON particulière." explique le post. Parmi les problèmes syntaxiques, l'encoder/json peut accepter un UTF-8 non valide. Le comportement par défaut devrait signaler une erreur, au lieu d'introduire une corruption silencieuse des données, susceptible de causer des problèmes en aval. Autre exemple, des problèmes dans la sensibilité à la casse des caractéres. 

A cela, s'ajoute une API parfois sensible ou trop restrictive dans son utilisation ou encore des performances limitées. 

L'un des objectifs de cette nouvelle API est de corriger directement les défauts d'encoding/json même si cela impliquera une casse de code, ce qui n'est jamais neutre. "S'il est relativement facile d'ajouter de nouvelles fonctionnalités, il est difficile de modifier les fonctionnalités existantes. Malheureusement, ces problèmes sont des conséquences inhérentes à l'API existante, ce qui les rend pratiquement impossibles à corriger dans le cadre de la compatibilité Go 1." explique le post. Cependant, les responsables du projet veulent que les usages de l'API v1 soient les mêmes s'ils sont migrés directement sur la v2.

Go a donc décidé de planifier une nouvelle version d'encoding/json/v2. Ce projet est public depuis le début de la réflexion et les présentations en conférence depuis 2023. 

Parmi les évolutions attendues :

-  signale une erreur en présence d'UTF-8 non valide.
- signale une erreur si un objet JSON contient un nom en double.
- déconvertit un objet JSON en une structure Go en appliquant une correspondance sensible à la casse entre le nom du membre JSON et le nom du champ Go.
- redéfinit le tap optionnel omitempty pour omettre un champ s'il aurait été codé comme une valeur JSON « vide » (valeurs null, "", [] et {}).
Présentation complète : https://go.dev/blog/jsonv2-exp