package json import ( "net/http" ) // Render interface is copied from github.com/gin-gonic/gin@v1.8.1/render/render.go type Render interface { // Render writes data with custom ContentType. Render(http.ResponseWriter) error // WriteContentType writes custom ContentType. WriteContentType(w http.ResponseWriter) } type GoJsonRender struct { Data any NilSafeSlices bool NilSafeMaps bool Indent *IndentOpt Filter *string } func (r GoJsonRender) Render(w http.ResponseWriter) error { header := w.Header() if val := header["Content-Type"]; len(val) == 0 { header["Content-Type"] = []string{"application/json; charset=utf-8"} } jsonBytes, err := MarshalSafeCollections(r.Data, r.NilSafeSlices, r.NilSafeMaps, r.Indent, r.Filter) if err != nil { panic(err) } _, err = w.Write(jsonBytes) if err != nil { panic(err) } return nil } func (r GoJsonRender) RenderString() (string, error) { jsonBytes, err := MarshalSafeCollections(r.Data, r.NilSafeSlices, r.NilSafeMaps, r.Indent, r.Filter) if err != nil { panic(err) } return string(jsonBytes), nil } func (r GoJsonRender) WriteContentType(w http.ResponseWriter) { header := w.Header() if val := header["Content-Type"]; len(val) == 0 { header["Content-Type"] = []string{"application/json; charset=utf-8"} } }