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  }