all: migrate from json-iterator to encoding/json (#8159)

This commit is contained in:
ᴊᴏᴇ ᴄʜᴇɴ
2026-02-08 00:34:36 -05:00
committed by GitHub
parent 48500aa2b0
commit 3c358ede6d
14 changed files with 51 additions and 61 deletions

3
go.mod
View File

@@ -29,7 +29,6 @@ require (
github.com/google/uuid v1.6.0
github.com/inbucket/html2text v1.0.0
github.com/issue9/identicon v1.2.1
github.com/json-iterator/go v1.1.12
github.com/microcosm-cc/bluemonday v1.0.27
github.com/msteinert/pam v1.2.0
github.com/niklasfasching/go-org v1.9.1
@@ -113,8 +112,6 @@ require (
github.com/mattn/go-sqlite3 v1.14.24 // indirect
github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2 // indirect
github.com/microsoft/go-mssqldb v0.17.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect

8
go.sum
View File

@@ -200,7 +200,6 @@ github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4r
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
@@ -266,8 +265,6 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
@@ -315,11 +312,6 @@ github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwX
github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLgZiaenE=
github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/msteinert/pam v1.2.0 h1:mYfjlvN2KYs2Pb9G6nb/1f/nPfAttT/Jee5Sq9r3bGE=

View File

@@ -2,6 +2,7 @@ package database
import (
"context"
"encoding/json"
"fmt"
"path"
"strconv"
@@ -12,7 +13,6 @@ import (
"github.com/cockroachdb/errors"
"github.com/gogs/git-module"
api "github.com/gogs/go-gogs-client"
jsoniter "github.com/json-iterator/go"
"gorm.io/gorm"
log "unknwon.dev/clog/v2"
@@ -245,7 +245,7 @@ func (s *ActionsStore) MirrorSyncPush(ctx context.Context, opts MirrorSyncPushOp
return errors.Wrap(err, "prepare webhooks")
}
data, err := jsoniter.Marshal(opts.Commits)
data, err := json.Marshal(opts.Commits)
if err != nil {
return errors.Wrap(err, "marshal JSON")
}
@@ -529,7 +529,7 @@ func (s *ActionsStore) CommitRepo(ctx context.Context, opts CommitRepoOptions) e
opts.Commits.Commits = opts.Commits.Commits[:conf.UI.FeedMaxCommitNum]
}
data, err := jsoniter.Marshal(opts.Commits)
data, err := json.Marshal(opts.Commits)
if err != nil {
return errors.Wrap(err, "marshal JSON")
}

View File

@@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"context"
"encoding/json"
"fmt"
"io"
"os"
@@ -13,7 +14,6 @@ import (
"sync"
"github.com/cockroachdb/errors"
jsoniter "github.com/json-iterator/go"
"gorm.io/gorm"
"gorm.io/gorm/schema"
log "unknwon.dev/clog/v2"
@@ -99,7 +99,7 @@ func dumpTable(ctx context.Context, db *gorm.DB, table any, w io.Writer) error {
e.CreatedAt = e.CreatedAt.UTC()
}
err = jsoniter.NewEncoder(w).Encode(elem)
err = json.NewEncoder(w).Encode(elem)
if err != nil {
return errors.Wrap(err, "encode JSON")
}
@@ -129,7 +129,7 @@ func dumpLegacyTables(ctx context.Context, dirPath string, verbose bool) error {
}
if err = x.Context(ctx).Asc("id").Iterate(table, func(idx int, bean any) (err error) {
return jsoniter.NewEncoder(f).Encode(bean)
return json.NewEncoder(f).Encode(bean)
}); err != nil {
_ = f.Close()
return errors.Newf("dump table '%s': %v", tableName, err)
@@ -207,7 +207,7 @@ func importTable(ctx context.Context, db *gorm.DB, table any, r io.Reader) error
cleaned := bytes.ReplaceAll(scanner.Bytes(), []byte("\\u0000"), []byte(""))
elem := reflect.New(reflect.TypeOf(table).Elem()).Interface()
err = jsoniter.Unmarshal(cleaned, elem)
err = json.Unmarshal(cleaned, elem)
if err != nil {
return errors.Wrap(err, "unmarshal JSON to struct")
}
@@ -269,7 +269,7 @@ func importLegacyTables(ctx context.Context, dirPath string, verbose bool) error
_, isInsertProcessor := table.(xorm.BeforeInsertProcessor)
scanner := bufio.NewScanner(f)
for scanner.Scan() {
if err = jsoniter.Unmarshal(scanner.Bytes(), table); err != nil {
if err = json.Unmarshal(scanner.Bytes(), table); err != nil {
return errors.Newf("unmarshal to struct: %v", err)
}
@@ -283,7 +283,7 @@ func importLegacyTables(ctx context.Context, dirPath string, verbose bool) error
DeadlineUnix int64
ClosedDateUnix int64
}
if err = jsoniter.Unmarshal(scanner.Bytes(), &meta); err != nil {
if err = json.Unmarshal(scanner.Bytes(), &meta); err != nil {
log.Error("Failed to unmarshal to map: %v", err)
}

View File

@@ -2,12 +2,12 @@ package database
import (
"context"
"encoding/json"
"fmt"
"strconv"
"time"
"github.com/cockroachdb/errors"
jsoniter "github.com/json-iterator/go"
"gorm.io/gorm"
"gogs.io/gogs/internal/auth"
@@ -41,7 +41,8 @@ func (s *LoginSource) BeforeSave(_ *gorm.DB) (err error) {
if s.Provider == nil {
return nil
}
s.Config, err = jsoniter.MarshalToString(s.Provider.Config())
data, err := json.Marshal(s.Provider.Config())
s.Config = string(data)
return err
}
@@ -72,7 +73,7 @@ func (s *LoginSource) AfterFind(_ *gorm.DB) error {
switch s.Type {
case auth.LDAP:
var cfg ldap.Config
err := jsoniter.UnmarshalFromString(s.Config, &cfg)
err := json.Unmarshal([]byte(s.Config), &cfg)
if err != nil {
return err
}
@@ -80,7 +81,7 @@ func (s *LoginSource) AfterFind(_ *gorm.DB) error {
case auth.DLDAP:
var cfg ldap.Config
err := jsoniter.UnmarshalFromString(s.Config, &cfg)
err := json.Unmarshal([]byte(s.Config), &cfg)
if err != nil {
return err
}
@@ -88,7 +89,7 @@ func (s *LoginSource) AfterFind(_ *gorm.DB) error {
case auth.SMTP:
var cfg smtp.Config
err := jsoniter.UnmarshalFromString(s.Config, &cfg)
err := json.Unmarshal([]byte(s.Config), &cfg)
if err != nil {
return err
}
@@ -96,7 +97,7 @@ func (s *LoginSource) AfterFind(_ *gorm.DB) error {
case auth.PAM:
var cfg pam.Config
err := jsoniter.UnmarshalFromString(s.Config, &cfg)
err := json.Unmarshal([]byte(s.Config), &cfg)
if err != nil {
return err
}
@@ -104,7 +105,7 @@ func (s *LoginSource) AfterFind(_ *gorm.DB) error {
case auth.GitHub:
var cfg github.Config
err := jsoniter.UnmarshalFromString(s.Config, &cfg)
err := json.Unmarshal([]byte(s.Config), &cfg)
if err != nil {
return err
}
@@ -112,7 +113,7 @@ func (s *LoginSource) AfterFind(_ *gorm.DB) error {
case auth.Mock:
var cfg mockProviderConfig
err := jsoniter.UnmarshalFromString(s.Config, &cfg)
err := json.Unmarshal([]byte(s.Config), &cfg)
if err != nil {
return err
}
@@ -215,7 +216,8 @@ func (s *LoginSourcesStore) Create(ctx context.Context, opts CreateLoginSourceOp
IsActived: opts.Activated,
IsDefault: opts.Default,
}
source.Config, err = jsoniter.MarshalToString(opts.Config)
data, err := json.Marshal(opts.Config)
source.Config = string(data)
if err != nil {
return nil, err
}

View File

@@ -5,6 +5,7 @@ import (
"crypto/sha256"
"crypto/tls"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"net/url"
@@ -13,7 +14,6 @@ import (
"github.com/cockroachdb/errors"
"github.com/google/uuid"
jsoniter "github.com/json-iterator/go"
log "unknwon.dev/clog/v2"
"xorm.io/xorm"
@@ -126,7 +126,7 @@ func (w *Webhook) AfterSet(colName string, _ xorm.Cell) {
switch colName {
case "events":
w.HookEvent = &HookEvent{}
if err = jsoniter.Unmarshal([]byte(w.Events), w.HookEvent); err != nil {
if err = json.Unmarshal([]byte(w.Events), w.HookEvent); err != nil {
log.Error("Unmarshal [%d]: %v", w.ID, err)
}
case "created_unix":
@@ -138,7 +138,7 @@ func (w *Webhook) AfterSet(colName string, _ xorm.Cell) {
func (w *Webhook) SlackMeta() *SlackMeta {
s := &SlackMeta{}
if err := jsoniter.Unmarshal([]byte(w.Meta), s); err != nil {
if err := json.Unmarshal([]byte(w.Meta), s); err != nil {
log.Error("Failed to get Slack meta [webhook_id: %d]: %v", w.ID, err)
}
return s
@@ -151,7 +151,7 @@ func (w *Webhook) History(page int) ([]*HookTask, error) {
// UpdateEvent handles conversion from HookEvent to Events.
func (w *Webhook) UpdateEvent() error {
data, err := jsoniter.Marshal(w.HookEvent)
data, err := json.Marshal(w.HookEvent)
w.Events = string(data)
return err
}
@@ -475,7 +475,7 @@ func (t *HookTask) AfterSet(colName string, _ xorm.Cell) {
}
t.RequestInfo = &HookRequest{}
if err = jsoniter.Unmarshal([]byte(t.RequestContent), t.RequestInfo); err != nil {
if err = json.Unmarshal([]byte(t.RequestContent), t.RequestInfo); err != nil {
log.Error("Unmarshal[%d]: %v", t.ID, err)
}
@@ -485,14 +485,14 @@ func (t *HookTask) AfterSet(colName string, _ xorm.Cell) {
}
t.ResponseInfo = &HookResponse{}
if err = jsoniter.Unmarshal([]byte(t.ResponseContent), t.ResponseInfo); err != nil {
if err = json.Unmarshal([]byte(t.ResponseContent), t.ResponseInfo); err != nil {
log.Error("Unmarshal [%d]: %v", t.ID, err)
}
}
}
func (t *HookTask) ToJSON(v any) string {
p, err := jsoniter.Marshal(v)
p, err := json.Marshal(v)
if err != nil {
log.Error("Marshal [%d]: %v", t.ID, err)
}

View File

@@ -1,11 +1,11 @@
package database
import (
"encoding/json"
"fmt"
"strings"
"github.com/cockroachdb/errors"
jsoniter "github.com/json-iterator/go"
"github.com/gogs/git-module"
api "github.com/gogs/go-gogs-client"
@@ -39,7 +39,7 @@ type DingtalkPayload struct {
}
func (p *DingtalkPayload) JSONPayload() ([]byte, error) {
data, err := jsoniter.MarshalIndent(p, "", " ")
data, err := json.MarshalIndent(p, "", " ")
if err != nil {
return []byte{}, err
}

View File

@@ -1,12 +1,12 @@
package database
import (
"encoding/json"
"fmt"
"strconv"
"strings"
"github.com/cockroachdb/errors"
jsoniter "github.com/json-iterator/go"
"github.com/gogs/git-module"
api "github.com/gogs/go-gogs-client"
@@ -47,7 +47,7 @@ type DiscordPayload struct {
}
func (p *DiscordPayload) JSONPayload() ([]byte, error) {
data, err := jsoniter.MarshalIndent(p, "", " ")
data, err := json.MarshalIndent(p, "", " ")
if err != nil {
return []byte{}, err
}
@@ -370,8 +370,8 @@ func getDiscordReleasePayload(p *api.ReleasePayload) *DiscordPayload {
func GetDiscordPayload(p api.Payloader, event HookEventType, meta string) (payload *DiscordPayload, err error) {
slack := &SlackMeta{}
if err := jsoniter.Unmarshal([]byte(meta), &slack); err != nil {
return nil, errors.Newf("jsoniter.Unmarshal: %v", err)
if err := json.Unmarshal([]byte(meta), slack); err != nil {
return nil, errors.Newf("unmarshal: %v", err)
}
switch event {

View File

@@ -1,11 +1,11 @@
package database
import (
"encoding/json"
"fmt"
"strings"
"github.com/cockroachdb/errors"
jsoniter "github.com/json-iterator/go"
"github.com/gogs/git-module"
api "github.com/gogs/go-gogs-client"
@@ -38,7 +38,7 @@ type SlackPayload struct {
}
func (p *SlackPayload) JSONPayload() ([]byte, error) {
data, err := jsoniter.MarshalIndent(p, "", " ")
data, err := json.MarshalIndent(p, "", " ")
if err != nil {
return []byte{}, err
}
@@ -286,7 +286,7 @@ func getSlackReleasePayload(p *api.ReleasePayload) *SlackPayload {
func GetSlackPayload(p api.Payloader, event HookEventType, meta string) (payload *SlackPayload, err error) {
slack := &SlackMeta{}
if err := jsoniter.Unmarshal([]byte(meta), &slack); err != nil {
if err := json.Unmarshal([]byte(meta), slack); err != nil {
return nil, errors.Newf("unmarshal: %v", err)
}

View File

@@ -1,13 +1,12 @@
package admin
import (
"encoding/json"
"fmt"
"runtime"
"strings"
"time"
jsoniter "github.com/json-iterator/go"
"gogs.io/gogs/internal/conf"
"gogs.io/gogs/internal/context"
"gogs.io/gogs/internal/cron"
@@ -217,7 +216,7 @@ func Config(c *context.Context) {
Mode: strings.Title(conf.Log.Modes[i]),
}
result, _ := jsoniter.MarshalIndent(conf.Log.Configs[i], "", " ")
result, _ := json.MarshalIndent(conf.Log.Configs[i], "", " ")
loggers[i].Config = string(result)
}
c.Data["Loggers"] = loggers

View File

@@ -1,11 +1,11 @@
package repo
import (
"encoding/json"
"net/http"
"slices"
"github.com/cockroachdb/errors"
jsoniter "github.com/json-iterator/go"
api "github.com/gogs/go-gogs-client"
@@ -76,7 +76,7 @@ func CreateHook(c *context.APIContext, form api.CreateHookOption) {
c.ErrorStatus(http.StatusUnprocessableEntity, errors.New("Missing config option: channel"))
return
}
meta, err := jsoniter.Marshal(&database.SlackMeta{
meta, err := json.Marshal(&database.SlackMeta{
Channel: channel,
Username: form.Config["username"],
IconURL: form.Config["icon_url"],
@@ -122,7 +122,7 @@ func EditHook(c *context.APIContext, form api.EditHookOption) {
if w.HookTaskType == database.SLACK {
if channel, ok := form.Config["channel"]; ok {
meta, err := jsoniter.Marshal(&database.SlackMeta{
meta, err := json.Marshal(&database.SlackMeta{
Channel: channel,
Username: form.Config["username"],
IconURL: form.Config["icon_url"],

View File

@@ -1,10 +1,10 @@
package lfs
import (
"encoding/json"
"fmt"
"net/http"
jsoniter "github.com/json-iterator/go"
"gopkg.in/macaron.v1"
log "unknwon.dev/clog/v2"
@@ -19,7 +19,7 @@ func serveBatch(store Store) macaron.Handler {
return func(c *macaron.Context, owner *database.User, repo *database.Repository) {
var request batchRequest
defer func() { _ = c.Req.Request.Body.Close() }()
err := jsoniter.NewDecoder(c.Req.Request.Body).Decode(&request)
err := json.NewDecoder(c.Req.Request.Body).Decode(&request)
if err != nil {
responseJSON(c.Resp, http.StatusBadRequest, responseError{
Message: strutil.ToUpperFirst(err.Error()),
@@ -172,7 +172,7 @@ func responseJSON(w http.ResponseWriter, status int, v any) {
w.Header().Set("Content-Type", contentType)
w.WriteHeader(status)
err := jsoniter.NewEncoder(w).Encode(v)
err := json.NewEncoder(w).Encode(v)
if err != nil {
log.Error("Failed to encode JSON: %v", err)
return

View File

@@ -1,6 +1,7 @@
package repo
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
@@ -10,7 +11,6 @@ import (
"github.com/cockroachdb/errors"
"github.com/gogs/git-module"
api "github.com/gogs/go-gogs-client"
jsoniter "github.com/json-iterator/go"
"gopkg.in/macaron.v1"
"gogs.io/gogs/internal/conf"
@@ -213,7 +213,7 @@ func WebhooksSlackNewPost(c *context.Context, orCtx *orgRepoContext, f form.NewS
}
c.Data["SlackMeta"] = meta
p, err := jsoniter.Marshal(meta)
p, err := json.Marshal(meta)
if err != nil {
c.Error(err, "marshal JSON")
return
@@ -245,7 +245,7 @@ func WebhooksDiscordNewPost(c *context.Context, orCtx *orgRepoContext, f form.Ne
}
c.Data["SlackMeta"] = meta
p, err := jsoniter.Marshal(meta)
p, err := json.Marshal(meta)
if err != nil {
c.Error(err, "marshal JSON")
return
@@ -394,7 +394,7 @@ func WebhooksSlackEditPost(c *context.Context, orCtx *orgRepoContext, f form.New
return
}
meta, err := jsoniter.Marshal(&database.SlackMeta{
meta, err := json.Marshal(&database.SlackMeta{
Channel: f.Channel,
Username: f.Username,
IconURL: f.IconURL,
@@ -422,7 +422,7 @@ func WebhooksDiscordEditPost(c *context.Context, orCtx *orgRepoContext, f form.N
return
}
meta, err := jsoniter.Marshal(&database.SlackMeta{
meta, err := json.Marshal(&database.SlackMeta{
Username: f.Username,
IconURL: f.IconURL,
Color: f.Color,

View File

@@ -1,6 +1,7 @@
package template
import (
"encoding/json"
"fmt"
"html/template"
"mime"
@@ -11,7 +12,6 @@ import (
"github.com/cockroachdb/errors"
"github.com/editorconfig/editorconfig-core-go/v2"
jsoniter "github.com/json-iterator/go"
"github.com/microcosm-cc/bluemonday"
"golang.org/x/net/html/charset"
"golang.org/x/text/transform"
@@ -249,7 +249,7 @@ func ActionIcon(opType int) string {
func ActionContent2Commits(act Actioner) *database.PushCommits {
push := database.NewPushCommits()
if err := jsoniter.Unmarshal([]byte(act.GetContent()), push); err != nil {
if err := json.Unmarshal([]byte(act.GetContent()), push); err != nil {
log.Error("Unmarshal:\n%s\nERROR: %v", act.GetContent(), err)
}
return push