github.com/qiniu/go-sdk/v7@v7.27.0/client/json_decode.go (about) 1 package client 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io" 8 ) 9 10 type jsonDecodeError struct { 11 original error 12 data []byte 13 } 14 15 func (e jsonDecodeError) Error() string { return fmt.Sprintf("%s: %s", e.original.Error(), e.data) } 16 17 func (e jsonDecodeError) Unwrap() error { return e.original } 18 19 func decodeJsonFromData(data []byte, v interface{}) error { 20 err := json.Unmarshal(data, v) 21 if err != nil { 22 return jsonDecodeError{original: err, data: data} 23 } 24 return nil 25 } 26 27 func DecodeJsonFromReader(reader io.Reader, v interface{}) error { 28 buf := new(bytes.Buffer) 29 t := io.TeeReader(reader, buf) 30 err := json.NewDecoder(t).Decode(v) 31 if err != nil { 32 return jsonDecodeError{original: err, data: buf.Bytes()} 33 } 34 return nil 35 }