any used to decode any valid JSON value, and returns an interface{} that holds the actual data
()
| 181 | // any used to decode any valid JSON value, and returns an |
| 182 | // interface{} that holds the actual data |
| 183 | func (d *Decoder) any() (interface{}, ValueType, error) { |
| 184 | c := d.cur() |
| 185 | |
| 186 | switch c { |
| 187 | case '"': |
| 188 | i, err := d.string() |
| 189 | return i, String, err |
| 190 | case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': |
| 191 | i, err := d.number() |
| 192 | return i, Number, err |
| 193 | case '-': |
| 194 | if c = d.next(); c < '0' && c > '9' { |
| 195 | return nil, Unknown, d.mkError(ErrSyntax, "in negative numeric literal") |
| 196 | } |
| 197 | n, err := d.number() |
| 198 | if err != nil { |
| 199 | return nil, Unknown, err |
| 200 | } |
| 201 | return -n, Number, nil |
| 202 | case 'f': |
| 203 | if d.remaining() < 4 { |
| 204 | return nil, Unknown, d.mkError(ErrUnexpectedEOF) |
| 205 | } |
| 206 | if d.next() == 'a' && d.next() == 'l' && d.next() == 's' && d.next() == 'e' { |
| 207 | return false, Boolean, nil |
| 208 | } |
| 209 | return nil, Unknown, d.mkError(ErrSyntax, "in literal false") |
| 210 | case 't': |
| 211 | if d.remaining() < 3 { |
| 212 | return nil, Unknown, d.mkError(ErrUnexpectedEOF) |
| 213 | } |
| 214 | if d.next() == 'r' && d.next() == 'u' && d.next() == 'e' { |
| 215 | return true, Boolean, nil |
| 216 | } |
| 217 | return nil, Unknown, d.mkError(ErrSyntax, "in literal true") |
| 218 | case 'n': |
| 219 | if d.remaining() < 3 { |
| 220 | return nil, Unknown, d.mkError(ErrUnexpectedEOF) |
| 221 | } |
| 222 | if d.next() == 'u' && d.next() == 'l' && d.next() == 'l' { |
| 223 | return nil, Null, nil |
| 224 | } |
| 225 | return nil, Unknown, d.mkError(ErrSyntax, "in literal null") |
| 226 | case '[': |
| 227 | i, err := d.array() |
| 228 | return i, Array, err |
| 229 | case '{': |
| 230 | var i interface{} |
| 231 | var err error |
| 232 | if d.objectAsKVS { |
| 233 | i, err = d.objectOrdered() |
| 234 | } else { |
| 235 | i, err = d.object() |
| 236 | } |
| 237 | return i, Object, err |
| 238 | default: |
| 239 | return nil, Unknown, d.mkError(ErrSyntax, "looking for beginning of value") |
| 240 | } |