İçeriğe geç

Çalışma zamanında özel JSON codec'i

Gin, derleme etiketleri kullanmadan özel JSON serileştirme ve seriyi kaldırma mantığını destekler.

  1. json.Core arayüzünü uygulayan özel bir struct tanımlayın.
  2. Motorunuz başlamadan önce, özel struct’ı kullanarak json.API’ye değerler atayın.
package main
import (
"io"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/codec/json"
jsoniter "github.com/json-iterator/go"
)
var customConfig = jsoniter.Config{
EscapeHTML: true,
SortMapKeys: true,
ValidateJsonRawMessage: true,
}.Froze()
type customJsonApi struct{}
func (j customJsonApi) Marshal(v any) ([]byte, error) {
return customConfig.Marshal(v)
}
func (j customJsonApi) Unmarshal(data []byte, v any) error {
return customConfig.Unmarshal(data, v)
}
func (j customJsonApi) MarshalIndent(v any, prefix, indent string) ([]byte, error) {
return customConfig.MarshalIndent(v, prefix, indent)
}
func (j customJsonApi) NewEncoder(writer io.Writer) json.Encoder {
return customConfig.NewEncoder(writer)
}
func (j customJsonApi) NewDecoder(reader io.Reader) json.Decoder {
return customConfig.NewDecoder(reader)
}
func main() {
// Replace the default json api
json.API = customJsonApi{}
// Start your gin engine
router := gin.Default()
router.Run(":8080")
}