Go 1.27でJSON新APIが正式リリース

原題: A new Go API for JSON

なぜ重要か

15年以上変わらなかったGoのJSON標準ライブラリが刷新され、セキュリティ強化と仕様準拠が標準的な開発慣行として普及する契機となる。

Googleは2026年11月4日、Go言語向けの新しいJSONパッケージ「encoding/json/v2」および「encoding/json/jsontext」がGo 1.27で安定版として一般提供開始となったと発表した。既存の「encoding/json」が抱えるUTF-8検証の欠如や重複キー処理などの仕様上の欠陥、パフォーマンス・柔軟性の問題を解消することを目的としている。

Go言語の標準ライブラリに含まれる「encoding/json」は、Go 1.0以前から15年以上にわたって使われてきた。しかし長年の運用の中でユーザーから多くの問題点が指摘されており、今回の新APIはそれらを抜本的に解決するために設計された。

主な問題点として挙げられているのは、まずJSON構文の取り扱いの不正確さだ。現行の「encoding/json」は無効なUTF-8を受け入れてしまう。これは最新のInternet Standard(RFC 8259)に違反しており、データの無音な破損を招く可能性がある。また、同一オブジェクト内に重複したメンバー名が存在する場合も受け入れてしまう。重複キーの存在はJSONの意味を曖昧にし、セキュリティ上の脆弱性にもつながる。実際にCVE-2017-12635として悪用された事例も報告されている。

新パッケージ「encoding/json/v2」ではこれらの挙動を修正し、デフォルトで無効UTF-8や重複キーに対してエラーを返すよう変更された。これにより、異なる実装間での解釈の差異によるセキュリティリスクを低減できる。

今回の発表はGo公式ブログにて行われ、開発者としてMichael Pratt、Joe Tsai、Daniel Martí、Johan Brandhorst-Satzkorn、Roger Peppe、Chris Hines、Damien Neilの7名がクレジットされている。昨年の実験的APIとしての公開後、ユーザーからのフィードバックをもとに追加の修正・改良を重ねた上で今回の正式リリースに至った。

新APIは後方互換性を維持しつつ、既存コードからの移行を念頭に設計されている。「encoding/json/jsontext」パッケージはより低レベルなJSONテキスト操作を担うもので、両パッケージを組み合わせることで柔軟な利用が可能となっている。

出典

go.dev — 元記事を読む →