Skip to content

Commit 2fc8c67

Browse files
rossigeetechknowlogickwxiaoguang
committed
use experimental go json v2 library (go-gitea#35392)
details: https://pkg.go.dev/encoding/json/v2 --------- Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
1 parent ed7a57d commit 2fc8c67

File tree

5 files changed

+76
-11
lines changed

5 files changed

+76
-11
lines changed

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,11 @@ require (
279279
go.uber.org/zap/exp v0.3.0 // indirect
280280
go.yaml.in/yaml/v2 v2.4.3 // indirect
281281
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
282-
golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect
283-
golang.org/x/mod v0.28.0 // indirect
284-
golang.org/x/time v0.13.0 // indirect
285-
golang.org/x/tools v0.37.0 // indirect
286-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
282+
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect
283+
golang.org/x/mod v0.27.0 // indirect
284+
golang.org/x/time v0.12.0 // indirect
285+
golang.org/x/tools v0.36.0 // indirect
286+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 // indirect
287287
gopkg.in/warnings.v0 v0.1.2 // indirect
288288
gopkg.in/yaml.v2 v2.4.0 // indirect
289289
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -854,8 +854,8 @@ golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE
854854
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
855855
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
856856
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
857-
golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU=
858-
golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk=
857+
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0=
858+
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4=
859859
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
860860
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
861861
golang.org/x/image v0.31.0 h1:mLChjE2MV6g1S7oqbXC0/UcKijjm5fnJLUYKIYrLESA=

modules/json/json.go

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,70 @@ type Interface interface {
2929
Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error
3030
}
3131

32-
var DefaultJSONHandler = getDefaultJSONHandler()
32+
var (
33+
DefaultJSONHandler = getDefaultJSONHandler()
34+
35+
_ Interface = StdJSON{}
36+
_ Interface = JSONiter{}
37+
)
38+
39+
// StdJSON implements Interface via encoding/json
40+
type StdJSON struct{}
41+
42+
// Marshal implements Interface
43+
func (StdJSON) Marshal(v any) ([]byte, error) {
44+
return json.Marshal(v)
45+
}
46+
47+
// Unmarshal implements Interface
48+
func (StdJSON) Unmarshal(data []byte, v any) error {
49+
return json.Unmarshal(data, v)
50+
}
51+
52+
// NewEncoder implements Interface
53+
func (StdJSON) NewEncoder(writer io.Writer) Encoder {
54+
return json.NewEncoder(writer)
55+
}
56+
57+
// NewDecoder implements Interface
58+
func (StdJSON) NewDecoder(reader io.Reader) Decoder {
59+
return json.NewDecoder(reader)
60+
}
61+
62+
// Indent implements Interface
63+
func (StdJSON) Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error {
64+
return json.Indent(dst, src, prefix, indent)
65+
}
66+
67+
// JSONiter implements Interface via jsoniter
68+
type JSONiter struct {
69+
jsoniter.API
70+
}
71+
72+
// Marshal implements Interface
73+
func (j JSONiter) Marshal(v any) ([]byte, error) {
74+
return j.API.Marshal(v)
75+
}
76+
77+
// Unmarshal implements Interface
78+
func (j JSONiter) Unmarshal(data []byte, v any) error {
79+
return j.API.Unmarshal(data, v)
80+
}
81+
82+
// NewEncoder implements Interface
83+
func (j JSONiter) NewEncoder(writer io.Writer) Encoder {
84+
return j.API.NewEncoder(writer)
85+
}
86+
87+
// NewDecoder implements Interface
88+
func (j JSONiter) NewDecoder(reader io.Reader) Decoder {
89+
return j.API.NewDecoder(reader)
90+
}
91+
92+
// Indent implements Interface, since jsoniter don't support Indent, just use encoding/json's
93+
func (j JSONiter) Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error {
94+
return json.Indent(dst, src, prefix, indent)
95+
}
3396

3497
// Marshal converts object as bytes
3598
func Marshal(v any) ([]byte, error) {

modules/json/jsonlegacy.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ package json
77

88
import (
99
"io"
10+
11+
jsoniter "github.com/json-iterator/go"
1012
)
1113

1214
func getDefaultJSONHandler() Interface {
13-
return jsonGoccy{}
15+
return JSONiter{jsoniter.ConfigCompatibleWithStandardLibrary}
1416
}
1517

1618
func MarshalKeepOptionalEmpty(v any) ([]byte, error) {

modules/lfs/http_client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func TestHTTPClientDownload(t *testing.T) {
193193
},
194194
{
195195
endpoint: "https://invalid-json-response.io",
196-
expectedError: "/(invalid json|invalid character)/",
196+
expectedError: "/(invalid json|jsontext: invalid character)/",
197197
},
198198
{
199199
endpoint: "https://valid-batch-request-download.io",
@@ -301,7 +301,7 @@ func TestHTTPClientUpload(t *testing.T) {
301301
},
302302
{
303303
endpoint: "https://invalid-json-response.io",
304-
expectedError: "/(invalid json|invalid character)/",
304+
expectedError: "/(invalid json|jsontext: invalid character)/",
305305
},
306306
{
307307
endpoint: "https://valid-batch-request-upload.io",

0 commit comments

Comments
 (0)