Artikel teilen

Die Programmiersprache Go hat nach sechs Jahren Arbeit ein neues JSON-Paket. Beim Einlesen von Daten ist es in Benchmarks der Entwickler bis zu zehnmal schneller als der Vorgänger. Das neue Paket weist ungültige Zeichen und doppelte Schlüssel ab, die der alte Code durchließ. Bestehende Programme laufen weiter.

Ein Klick · kostenlosDr. Web bei Google bevorzugenMarkieren Sie drweb.de als bevorzugte Quelle. Dann sehen Sie unsere Artikel öfter unter den Top-Meldungen.Jetzt hinzufügen
Inhalt 4 Abschnitte
  1. Was macht das neue Paket anders?
  2. Warum sind doppelte Schlüssel ein Sicherheitsthema?
  3. Was heißt das für Ihr Unternehmen?
  4. Mehr Newshunger?

Das Go-Team hat am 4. November im Go-Blog das Paket encoding/json/v2 vorgestellt, das seit dem Erscheinen von Go 1.27 im August zur Standardbibliothek gehört.[1][2] Das alte Paket encoding/json bleibt dauerhaft erhalten und läuft jetzt selbst auf der neuen Grundlage.[1]

Auf einen Blick

Das Wichtigste in Kürze

  • Das Paket encoding/json/v2 gehört seit Go 1.27 zur Standardbibliothek, das alte Paket bleibt dauerhaft unterstützt.
  • Beim Einlesen messen die Entwickler bis zu zehnfache Geschwindigkeit, beim Schreiben liegt das neue Paket etwa gleichauf.
  • Ungültiges UTF-8 und doppelte Schlüssel erzeugen standardmäßig einen Fehler, leere Listen erscheinen als [] statt als null.
  • Ein Umstieg ist freiwillig, Optionen stellen das alte Verhalten weitgehend wieder her.

Was macht das neue Paket anders?

Briefkasten mit orangefarbenem Umschlag. Text: „Nur gültiges JSON“, „Doppelt“ und Adresslabels
Go-JSON-Paket: Neue Version behebt UTF-8-Validierung und lehnt doppelte Objektschlüssel ab

Das alte Paket hatte Eigenheiten, die sich innerhalb des Go-1-Kompatibilitätsversprechens nicht mehr beheben ließen. Es ließ ungültiges UTF-8 durch, obwohl der Standard RFC 8259 gültiges UTF-8 verlangt, und akzeptierte doppelte Schlüssel in einem Objekt.[1]

Das neue Paket kehrt diese Voreinstellungen um. Ungültige Zeichen und doppelte Schlüssel lösen einen Fehler aus. Leere Listen schreibt es als [], leere Maps als {}, und beim Einlesen in Strukturen zählt die Groß- und Kleinschreibung der Feldnamen. Eine Dauer vom Typ time.Duration löst ohne Angabe eines Formats ebenfalls einen Fehler aus. Die meisten dieser Änderungen lassen sich per Struct-Tag oder Option zurücknehmen.[1]

Beim Schreiben liegt das neue Paket etwa gleichauf mit dem Vorgänger, beim Einlesen messen die Entwickler eine bis zu zehnfache Beschleunigung. Am stärksten profitieren Programme mit eigenen Methoden zum Schreiben und Einlesen von JSON: Wenn sie MarshalJSONTo und UnmarshalJSONFrom ergänzen, entfällt das zweimalige Einlesen der Daten, das der alte Weg erzwang. Im Kubernetes-Baustein kube-openapi verbesserte dieser Wechsel die Geschwindigkeit um Größenordnungen, schreibt das Go-Team. Weitere Optimierungen sind für Go 1.28 geplant.[1]

Warum sind doppelte Schlüssel ein Sicherheitsthema?

Wenn zwei Programme dasselbe Dokument verschieden lesen, prüft das eine etwas anderes, als das andere verarbeitet. Der Standard RFC 8259 lässt offen, wie ein Parser doppelte Schlüssel behandeln soll. Das Go-Team nennt als Beispiel für den Missbrauch die Schwachstelle CVE-2017-12635.[1]

In Apache CouchDB lasen ein Erlang- und ein JavaScript-Parser Benutzerdokumente unterschiedlich. Dadurch ließen sich Dokumente mit doppelten roles-Schlüsseln absenden, darunter die Rolle des Administrators.[3] Ein Go-Dienst, der Anfragen prüft und an Systeme in anderen Sprachen weiterreicht, bricht mit den Voreinstellungen von v2 bei doppelten Schlüsseln ab, statt eine mehrdeutige Anfrage weiterzugeben.

Ein JSON-Parser, der doppelte Schlüssel durchwinkt, ist eine Sicherheitsfrage und kein Schönheitsfehler.

Markus Seyfferth, Chefredakteur Dr. Web
Zitat teilen
JSON in Go: Was sich mit encoding/json/v2 ändert
Angaben des Go-Teams im Go-Blog vom 4. November 2026

Die Eckdaten

bis 10-fach
Höchste gemessene Beschleunigung beim Einlesen von JSON, das Schreiben liegt etwa gleichauf
6 Jahre
von den ersten Entwürfen Ende 2020 bis zur Veröffentlichung
August 2026
Go 1.27 erscheint mit dem neuen Paket in der Standardbibliothek

Die Voreinstellungen im Vergleich

Ungültiges UTF-8
Altes Paket: wird angenommen. Neues Paket: Fehler
Doppelte Schlüssel
Altes Paket: werden angenommen. Neues Paket: Fehler
Leere Liste oder Map
Altes Paket: schreibt null. Neues Paket: schreibt [] oder {}
Feldnamen beim Einlesen
Altes Paket: Groß- und Kleinschreibung egal. Neues Paket: exakte Übereinstimmung
Umstieg
freiwillig, das alte Paket bleibt dauerhaft unterstützt

Was heißt das für Ihr Unternehmen?

Für bestehende Programme besteht kein Zeitdruck. Das alte Paket läuft laut den Release Notes jetzt auf der neuen Implementierung und verhält sich wie zuvor, nur Fehlertexte können abweichen.[2] Tests, die Fehlermeldungen wörtlich vergleichen, sollten Sie deshalb nach dem Wechsel auf Go 1.27 prüfen. Wenn Probleme auftreten, stellt die Umgebungsvariable GOEXPERIMENT=nojsonv2 die alte Implementierung wieder her, der Schalter soll aber in einer künftigen Version entfallen.[2]

Fragen Sie Ihre Entwickler oder Ihre Agentur, ob Go-Dienste, die Daten von außen annehmen, doppelte Schlüssel und ungültige Zeichen bereits abweisen. Sie stellen diese Dienste am besten zuerst auf v2 um. Die Linux-Sicherheitslücke CVE-2026-98432 zeigte schon, wie Voreinstellungen in Go über die Sicherheit entscheiden: Seit Go 1.24 schaltet die Sprache Multipath TCP für Dienste mit eingehenden Verbindungen von selbst ein. Wofür Unternehmen Go und andere Sprachen einsetzen, steht in der Programmiersprachen-Übersicht.

Quellen

3 Quellen anzeigenQuellen ausblenden
  1. The Go BlogA new Go API for JSON04.11.2026
  2. GoGo 1.27 Release Notes
  3. NIST National Vulnerability DatabaseCVE-2017-12635, Apache CouchDB

Mehr Newshunger?

4,3 20 Bewertungen

Wie hat Ihnen dieser Artikel gefallen?

Dr. Web Newsletter

Jede Woche ein bisschen klüger.

Der Dr. Web Newsletter: die besten Artikel, Anbieter-Tipps und neue Tools, kompakt zusammengefasst, jeden Donnerstag. Kostenlos und jederzeit abbestellbar.