Was passiert ist
Mit dem Release von Go 1.27 haben das Paket encoding/json/v2 und das zugehörige encoding/json/jsontext den Status „stabil“ erreicht und stehen für den allgemeinen Einsatz offen, wie Go mitteilte. Der Beitrag vom 4. November 2026 hatte sieben Autoren, darunter Joe Tsai, Damien Neil, Daniel Martí und Michael Pratt. Er folgt auf eine experimentelle Version der API, die im Vorjahr eingeführt und nach weiterem Feedback überarbeitet wurde.
Die Autoren erklärten, das ursprüngliche Paket encoding/json habe sich als flexibel erwiesen, weise aber Schwächen auf, auf die Nutzer über die Jahre hingewiesen hätten. Es toleriert ungültiges UTF-8, was RFC 8259 verbietet. Es akzeptiert außerdem Objekte mit wiederholten Membernamen, eine Schwachstelle, die Angreifer in der Vergangenheit ausgenutzt haben, etwa bei CVE-2017-12635. Zudem gleicht es Feldnamen ohne Beachtung der Groß- und Kleinschreibung ab und kodiert nil-Slices und -Maps als null.
Laut dem Beitrag ließen sich diese Verhaltensweisen nicht korrigieren, ohne das Kompatibilitätsversprechen von Go 1 zu brechen. Dasselbe gilt für Performance-Grenzen wie das Puffern ganzer Werte im Speicher und quadratische Verlangsamungen, wenn eigene Methoden rekursiv Marshal oder Unmarshal aufrufen. Das neue Design teilt die Arbeit in zwei Teile: jsontext verarbeitet die JSON-Syntax ohne Reflection, während json/v2 JSON-Werte auf Go-Typen abbildet.
Kontext
Go liefert JSON-Unterstützung in seiner Standardbibliothek bereits seit der Zeit vor Go 1.0 aus, und die Autoren bezeichnen JSON als das am weitesten verbreitete Datenformat im Internet. Da die Probleme in der bestehenden API selbst wurzeln, entschieden sie sich für einen separaten v2-Namensraum, statt im ursprünglichen Paket parallele Funktionen wie MarshalV2 hinzuzufügen. Eine im Beitrag zitierte Umfrage ergab, dass die meisten Go-Nutzer nil-Slices und -Maps als leere Arrays beziehungsweise Objekte kodiert haben möchten.
Das Briefing
Die Tech-Woche in einer E-Mail.
Die lesenswerten Beiträge der Woche. Jederzeit abbestellbar.
