50 lines
869 B
Go
50 lines
869 B
Go
package utils
|
|
|
|
import (
|
|
"github.com/bytedance/sonic"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/os/gctx"
|
|
"github.com/tidwall/gjson"
|
|
"io"
|
|
)
|
|
|
|
func ReadJson[T any](reader io.Reader) T {
|
|
defer func() {
|
|
if body, ok := reader.(io.ReadCloser); ok {
|
|
err := body.Close()
|
|
|
|
if err != nil {
|
|
g.Log().Errorf(gctx.GetInitCtx(), "cannot close reader: %+v", err)
|
|
}
|
|
}
|
|
}()
|
|
|
|
jsonBytes, err := io.ReadAll(reader)
|
|
OkOrPanic(err)
|
|
|
|
var ret T
|
|
|
|
err = sonic.Unmarshal(jsonBytes, &ret)
|
|
|
|
OkOrPanic(err)
|
|
|
|
return ret
|
|
}
|
|
|
|
func ReadGjsonResult(reader io.Reader) gjson.Result {
|
|
defer func() {
|
|
if body, ok := reader.(io.ReadCloser); ok {
|
|
err := body.Close()
|
|
|
|
if err != nil {
|
|
g.Log().Errorf(gctx.GetInitCtx(), "cannot close reader: %+v", err)
|
|
}
|
|
}
|
|
}()
|
|
|
|
jsonBytes, err := io.ReadAll(reader)
|
|
OkOrPanic(err)
|
|
|
|
return gjson.ParseBytes(jsonBytes)
|
|
}
|