1
0
Просмотр исходного кода

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

ᴊᴏᴇ ᴄʜᴇɴ 2 дней назад
Родитель
Сommit
3c358ede6d

+ 0 - 3
go.mod

@@ -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

+ 0 - 8
go.sum

@@ -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=

+ 3 - 3
internal/database/actions.go

@@ -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")
 	}

+ 6 - 6
internal/database/backup.go

@@ -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)
 			}
 

+ 11 - 9
internal/database/login_sources.go

@@ -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
 	}

+ 7 - 7
internal/database/webhook.go

@@ -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)
 	}

+ 2 - 2
internal/database/webhook_dingtalk.go

@@ -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
 	}

+ 4 - 4
internal/database/webhook_discord.go

@@ -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 {

+ 3 - 3
internal/database/webhook_slack.go

@@ -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)
 	}
 

+ 2 - 3
internal/route/admin/admin.go

@@ -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

+ 3 - 3
internal/route/api/v1/repo/hook.go

@@ -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"],

+ 3 - 3
internal/route/lfs/batch.go

@@ -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

+ 5 - 5
internal/route/repo/webhook.go

@@ -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,

+ 2 - 2
internal/template/template.go

@@ -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