DecodeJSON decodes a value encoded with EncodeJSON.
(b []byte)
| 187 | |
| 188 | // DecodeJSON decodes a value encoded with EncodeJSON. |
| 189 | func DecodeJSON(b []byte) ([]byte, JSON, error) { |
| 190 | b, containerHeader, err := encoding.DecodeUint32Ascending(b) |
| 191 | if err != nil { |
| 192 | return b, nil, err |
| 193 | } |
| 194 | switch containerHeader & containerHeaderTypeMask { |
| 195 | case scalarContainerTag: |
| 196 | var entry jEntry |
| 197 | var err error |
| 198 | b, entry, err = decodeJEntry(b, 0) |
| 199 | if err != nil { |
| 200 | return b, nil, err |
| 201 | } |
| 202 | return decodeJSONValue(entry, b) |
| 203 | case arrayContainerTag: |
| 204 | return decodeJSONArray(containerHeader, b) |
| 205 | case objectContainerTag: |
| 206 | return decodeJSONObject(containerHeader, b) |
| 207 | } |
| 208 | return b, nil, errors.AssertionFailedf( |
| 209 | "error decoding JSON value, header: %x", errors.Safe(containerHeader)) |
| 210 | } |
| 211 | |
| 212 | // FromEncoding returns a JSON value which is lazily decoded. |
| 213 | func FromEncoding(b []byte) (JSON, error) { |
no test coverage detected
searching dependent graphs…