Go 1.27 changes the engine behind encoding/json while preserving the existing API’s behavior. Importing encoding/json/v2 is a separate decision with different defaults. Go 1.27.1 is now available and includes JSON fixes.

A compiler upgrade is not the same as an API migration
The August 19 release announcement introduces generic methods, new JSON packages and runtime improvements. The release notes explain that the old encoding/json API remains supported, now implemented using the v2 engine. Marshaling and unmarshaling semantics are preserved, although exact error messages can change.
Explicit encoding/json/v2 chooses stricter defaults, including rejection of duplicate object names and invalid UTF-8. The package documentation describes its configurable options. Replacing an import is therefore a contract change to examine, not a prerequisite for using Go 1.27.
The separate encoding/json/jsontext package handles syntactic streaming. Use it when processing tokens or JSON values is actually the job; its existence does not require rewriting an ordinary application decoder.
Build a small contract matrix
An original migration worksheet can start with four inputs: an ordinary object, duplicate names, an unknown field and malformed JSON. For each, record the HTTP status or application error, the accepted value and the exact options passed to the decoder.
For example, use an object containing the key “mode” twice, with values “safe” and “fast”. The important question is whether the receiving contract accepts ambiguity or rejects it. The v2 default rejects duplicate names. A successful decode by another implementation does not establish that every receiver will choose the same value.
Keep a normal object as a control, and keep malformed input as a rejection case. Test error classification separately from human-readable wording so a punctuation change cannot accidentally select another application branch. This is a proposed fixture set based on the documented contracts, not a Go test executed by PeopleAreGeek.
Evaluate the corrected release and the real workload
The release history lists Go 1.27.1 on September 1 with fixes including encoding/json, compiler and runtime. It is the relevant maintenance release when evaluating the 1.27 line today. The temporary build-time nojsonv2 experiment can restore the old implementation for compatibility diagnosis; it is not a permanent migration strategy.
Generic methods can declare their own type parameters, but interface methods cannot. That limitation matters when designing a public interface around a new method.
The allocator’s reported improvement of up to 30% concerns small allocations, with around 1% expected for allocation-heavy programs. It does not establish a 1% reduction in every service bill. Compare application throughput, latency, memory and binary size under the same workload before translating implementation gains into operating cost.
Separate compatibility implementation from explicit v2 defaults; add 1.27.1, meaningful contract cases and bounded allocator claims.