]> Cypherpunks repositories - gostls13.git/commit
encoding/json: add json/v2 with GOEXPERIMENT=jsonv2 guard
authorDamien Neil <dneil@google.com>
Fri, 11 Apr 2025 21:19:51 +0000 (14:19 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 18 Apr 2025 15:24:07 +0000 (08:24 -0700)
commit0e17905793cb5e0acc323a0cdf3733199d93976a
treefec117ceb6b56866e6c51e6acd72901cf91717ce
parentc889004615b40535ebd5054cbcf2deebdb3a299a
encoding/json: add json/v2 with GOEXPERIMENT=jsonv2 guard

This imports the proposed new v2 JSON API implemented in
github.com/go-json-experiment/json as of commit
d3c622f1b874954c355e60c8e6b6baa5f60d2fed.

When GOEXPERIMENT=jsonv2 is set, the encoding/json/v2 and
encoding/jsontext packages are visible, the encoding/json
package is implemented in terms of encoding/json/v2, and
the encoding/json package include various additional APIs.
(See #71497 for details.)

When GOEXPERIMENT=jsonv2 is not set, the new API is not
present and the encoding/json package is unchanged.

The experimental API is not bound by the Go compatibility
promise and is expected to evolve as updates are made to
the json/v2 proposal.

The contents of encoding/json/internal/jsontest/testdata
are compressed with zstd v1.5.7 with the -19 option.

Fixes #71845
For #71497

Change-Id: Ib8c94e5f0586b6aaa22833190b41cf6ef59f4f01
Reviewed-on: https://go-review.googlesource.com/c/go/+/665796
Auto-Submit: Damien Neil <dneil@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Joseph Tsai <joetsai@digital-static.net>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
107 files changed:
src/encoding/json/bench_test.go
src/encoding/json/decode.go
src/encoding/json/decode_test.go
src/encoding/json/encode.go
src/encoding/json/encode_test.go
src/encoding/json/example_marshaling_test.go
src/encoding/json/example_test.go
src/encoding/json/example_text_marshaling_test.go
src/encoding/json/fold.go
src/encoding/json/fold_test.go
src/encoding/json/fuzz_test.go
src/encoding/json/indent.go
src/encoding/json/internal/internal.go [new file with mode: 0644]
src/encoding/json/internal/jsonflags/flags.go [new file with mode: 0644]
src/encoding/json/internal/jsonflags/flags_test.go [new file with mode: 0644]
src/encoding/json/internal/jsonopts/options.go [new file with mode: 0644]
src/encoding/json/internal/jsonopts/options_test.go [new file with mode: 0644]
src/encoding/json/internal/jsontest/testcase.go [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata.go [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata/canada_geometry.json.zst [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata/citm_catalog.json.zst [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata/golang_source.json.zst [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata/string_escaped.json.zst [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata/string_unicode.json.zst [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata/synthea_fhir.json.zst [new file with mode: 0644]
src/encoding/json/internal/jsontest/testdata/twitter_status.json.zst [new file with mode: 0644]
src/encoding/json/internal/jsonwire/decode.go [new file with mode: 0644]
src/encoding/json/internal/jsonwire/decode_test.go [new file with mode: 0644]
src/encoding/json/internal/jsonwire/encode.go [new file with mode: 0644]
src/encoding/json/internal/jsonwire/encode_test.go [new file with mode: 0644]
src/encoding/json/internal/jsonwire/wire.go [new file with mode: 0644]
src/encoding/json/internal/jsonwire/wire_test.go [new file with mode: 0644]
src/encoding/json/jsontext/coder_test.go [new file with mode: 0644]
src/encoding/json/jsontext/decode.go [new file with mode: 0644]
src/encoding/json/jsontext/decode_test.go [new file with mode: 0644]
src/encoding/json/jsontext/doc.go [new file with mode: 0644]
src/encoding/json/jsontext/encode.go [new file with mode: 0644]
src/encoding/json/jsontext/encode_test.go [new file with mode: 0644]
src/encoding/json/jsontext/errors.go [new file with mode: 0644]
src/encoding/json/jsontext/example_test.go [new file with mode: 0644]
src/encoding/json/jsontext/export.go [new file with mode: 0644]
src/encoding/json/jsontext/fuzz_test.go [new file with mode: 0644]
src/encoding/json/jsontext/options.go [new file with mode: 0644]
src/encoding/json/jsontext/pools.go [new file with mode: 0644]
src/encoding/json/jsontext/quote.go [new file with mode: 0644]
src/encoding/json/jsontext/state.go [new file with mode: 0644]
src/encoding/json/jsontext/state_test.go [new file with mode: 0644]
src/encoding/json/jsontext/token.go [new file with mode: 0644]
src/encoding/json/jsontext/token_test.go [new file with mode: 0644]
src/encoding/json/jsontext/value.go [new file with mode: 0644]
src/encoding/json/jsontext/value_test.go [new file with mode: 0644]
src/encoding/json/number_test.go
src/encoding/json/scanner.go
src/encoding/json/scanner_test.go
src/encoding/json/stream.go
src/encoding/json/stream_test.go
src/encoding/json/tables.go
src/encoding/json/tagkey_test.go
src/encoding/json/tags.go
src/encoding/json/tags_test.go
src/encoding/json/v2/arshal.go [new file with mode: 0644]
src/encoding/json/v2/arshal_any.go [new file with mode: 0644]
src/encoding/json/v2/arshal_default.go [new file with mode: 0644]
src/encoding/json/v2/arshal_funcs.go [new file with mode: 0644]
src/encoding/json/v2/arshal_inlined.go [new file with mode: 0644]
src/encoding/json/v2/arshal_methods.go [new file with mode: 0644]
src/encoding/json/v2/arshal_test.go [new file with mode: 0644]
src/encoding/json/v2/arshal_time.go [new file with mode: 0644]
src/encoding/json/v2/arshal_time_test.go [new file with mode: 0644]
src/encoding/json/v2/bench_test.go [new file with mode: 0644]
src/encoding/json/v2/doc.go [new file with mode: 0644]
src/encoding/json/v2/errors.go [new file with mode: 0644]
src/encoding/json/v2/errors_test.go [new file with mode: 0644]
src/encoding/json/v2/example_orderedobject_test.go [new file with mode: 0644]
src/encoding/json/v2/example_test.go [new file with mode: 0644]
src/encoding/json/v2/fields.go [new file with mode: 0644]
src/encoding/json/v2/fields_test.go [new file with mode: 0644]
src/encoding/json/v2/fold.go [new file with mode: 0644]
src/encoding/json/v2/fold_test.go [new file with mode: 0644]
src/encoding/json/v2/fuzz_test.go [new file with mode: 0644]
src/encoding/json/v2/inline_test.go [new file with mode: 0644]
src/encoding/json/v2/intern.go [new file with mode: 0644]
src/encoding/json/v2/intern_test.go [new file with mode: 0644]
src/encoding/json/v2/options.go [new file with mode: 0644]
src/encoding/json/v2_bench_test.go [new file with mode: 0644]
src/encoding/json/v2_decode.go [new file with mode: 0644]
src/encoding/json/v2_decode_test.go [new file with mode: 0644]
src/encoding/json/v2_diff_test.go [new file with mode: 0644]
src/encoding/json/v2_encode.go [new file with mode: 0644]
src/encoding/json/v2_encode_test.go [new file with mode: 0644]
src/encoding/json/v2_example_marshaling_test.go [new file with mode: 0644]
src/encoding/json/v2_example_test.go [new file with mode: 0644]
src/encoding/json/v2_example_text_marshaling_test.go [new file with mode: 0644]
src/encoding/json/v2_fuzz_test.go [new file with mode: 0644]
src/encoding/json/v2_indent.go [new file with mode: 0644]
src/encoding/json/v2_inject.go [new file with mode: 0644]
src/encoding/json/v2_options.go [new file with mode: 0644]
src/encoding/json/v2_scanner.go [new file with mode: 0644]
src/encoding/json/v2_scanner_test.go [new file with mode: 0644]
src/encoding/json/v2_stream.go [new file with mode: 0644]
src/encoding/json/v2_stream_test.go [new file with mode: 0644]
src/encoding/json/v2_tagkey_test.go [new file with mode: 0644]
src/go/build/deps_test.go
src/internal/goexperiment/exp_jsonv2_off.go [new file with mode: 0644]
src/internal/goexperiment/exp_jsonv2_on.go [new file with mode: 0644]
src/internal/goexperiment/flags.go
src/time/time_test.go