encoding/json/v2

Guided tour · Encoding · pkg.go.dev →

Rewrite of encoding/json (experimental in Go 1.25, GOEXPERIMENT=jsonv2). Faster, stricter, configurable. Opt-in.

Marshal / Unmarshal

Basic usage

import jsonv2 "encoding/json/v2"

data, err := jsonv2.Marshal(user)
err = jsonv2.Unmarshal(data, &user)

Options

v2 uses functional options instead of flag-overloaded struct tags.

Marshal with options

data, err := jsonv2.Marshal(v,
    jsonv2.Deterministic(true),
    jsonv2.FormatNilSliceAsNull(true),
)

When to use it

Trade-offs

// Pros: clearer semantics, better performance, explicit options.
// Cons: experimental — APIs may change, and tooling (lint/codegen) may lag.
// Stick with encoding/json for production today; watch the proposal.