Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Unmarshal parses the JSON-encoded data and stores the result
- // in the value pointed to by v. If v is nil or not a pointer,
- // Unmarshal returns an InvalidUnmarshalError.
- //
- // Unmarshal uses the inverse of the encodings that
- // Marshal uses, allocating maps, slices, and pointers as necessary,
- // with the following additional rules:
- //
- // To unmarshal JSON into a pointer, Unmarshal first handles the case of
- // the JSON being the JSON literal null. In that case, Unmarshal sets
- // the pointer to nil. Otherwise, Unmarshal unmarshals the JSON into
- // the value pointed at by the pointer. If the pointer is nil, Unmarshal
- // allocates a new value for it to point to.
- //
- // To unmarshal JSON into a value implementing the Unmarshaler interface,
- // Unmarshal calls that value's UnmarshalJSON method, including
- // when the input is a JSON null.
- // Otherwise, if the value implements encoding.TextUnmarshaler
- // and the input is a JSON quoted string, Unmarshal calls that value's
- // UnmarshalText method with the unquoted form of the string.
- //
- // To unmarshal JSON into a struct, Unmarshal matches incoming object
- // keys to the keys used by Marshal (either the struct field name or its tag),
- // preferring an exact match but also accepting a case-insensitive match. By
- // default, object keys which don't have a corresponding struct field are
- // ignored (see Decoder.DisallowUnknownFields for an alternative).
- //
- // To unmarshal JSON into an interface value,
- // Unmarshal stores one of these in the interface value:
- //
- // bool, for JSON booleans
- // float64, for JSON numbers
- // string, for JSON strings
- // []interface{}, for JSON arrays
- // map[string]interface{}, for JSON objects
- // nil for JSON null
- //
- // To unmarshal a JSON array into a slice, Unmarshal resets the slice length
- // to zero and then appends each element to the slice.
- // As a special case, to unmarshal an empty JSON array into a slice,
- // Unmarshal replaces the slice with a new empty slice.
- //
- // To unmarshal a JSON array into a Go array, Unmarshal decodes
- // JSON array elements into corresponding Go array elements.
- // If the Go array is smaller than the JSON array,
- // the additional JSON array elements are discarded.
- // If the JSON array is smaller than the Go array,
- // the additional Go array elements are set to zero values.
- //
- // To unmarshal a JSON object into a map, Unmarshal first establishes a map to
- // use. If the map is nil, Unmarshal allocates a new map. Otherwise Unmarshal
- // reuses the existing map, keeping existing entries. Unmarshal then stores
- // key-value pairs from the JSON object into the map. The map's key type must
- // either be a string, an integer, or implement encoding.TextUnmarshaler.
- //
- // If a JSON value is not appropriate for a given target type,
- // or if a JSON number overflows the target type, Unmarshal
- // skips that field and completes the unmarshaling as best it can.
- // If no more serious errors are encountered, Unmarshal returns
- // an UnmarshalTypeError describing the earliest such error. In any
- // case, it's not guaranteed that all the remaining fields following
- // the problematic one will be unmarshaled into the target object.
- //
- // The JSON null value unmarshals into an interface, map, pointer, or slice
- // by setting that Go value to nil. Because null is often used in JSON to mean
- // ``not present,'' unmarshaling a JSON null into any other Go type has no effect
- // on the value and produces no error.
- //
- // When unmarshaling quoted strings, invalid UTF-8 or
- // invalid UTF-16 surrogate pairs are not treated as an error.
- // Instead, they are replaced by the Unicode replacement
- // character U+FFFD.
- //
- func Unmarshal(data []byte, v interface{}) error {
- // Check for well-formedness.
- // Avoids filling out half a data structure
- // before discovering a JSON syntax error.
- var d decodeState
- err := checkValid(data, &d.scan)
- if err != nil {
- return err
- }
- d.init(data)
- return d.unmarshal(v)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement