readValue reads one JSON value from the buffer and returns its raw bytes. It is optimized for the "one JSON value per line" case.
()
| 390 | // readValue reads one JSON value from the buffer and returns its raw bytes. It |
| 391 | // is optimized for the "one JSON value per line" case. |
| 392 | func (dec *Decoder) readValue() (v []byte, err error) { |
| 393 | var n int |
| 394 | var r []byte |
| 395 | d := decoder{flags: dec.flags} |
| 396 | |
| 397 | for { |
| 398 | if len(dec.remain) != 0 { |
| 399 | v, r, _, err = d.parseValue(dec.remain) |
| 400 | if err == nil { |
| 401 | dec.remain, n = skipSpacesN(r) |
| 402 | dec.inputOffset += int64(len(v) + n) |
| 403 | return |
| 404 | } |
| 405 | if len(r) != 0 { |
| 406 | // Parsing of the next JSON value stopped at a position other |
| 407 | // than the end of the input buffer, which indicaates that a |
| 408 | // syntax error was encountered. |
| 409 | return |
| 410 | } |
| 411 | } |
| 412 | |
| 413 | if err = dec.err; err != nil { |
| 414 | if len(dec.remain) != 0 && err == io.EOF { |
| 415 | err = io.ErrUnexpectedEOF |
| 416 | } |
| 417 | return |
| 418 | } |
| 419 | |
| 420 | if dec.buffer == nil { |
| 421 | dec.buffer = make([]byte, 0, minBufferSize) |
| 422 | } else { |
| 423 | dec.buffer = dec.buffer[:copy(dec.buffer[:cap(dec.buffer)], dec.remain)] |
| 424 | dec.remain = nil |
| 425 | } |
| 426 | |
| 427 | if (cap(dec.buffer) - len(dec.buffer)) < minReadSize { |
| 428 | buf := make([]byte, len(dec.buffer), 2*cap(dec.buffer)) |
| 429 | copy(buf, dec.buffer) |
| 430 | dec.buffer = buf |
| 431 | } |
| 432 | |
| 433 | n, err = io.ReadFull(dec.reader, dec.buffer[len(dec.buffer):cap(dec.buffer)]) |
| 434 | if n > 0 { |
| 435 | dec.buffer = dec.buffer[:len(dec.buffer)+n] |
| 436 | if err != nil { |
| 437 | err = nil |
| 438 | } |
| 439 | } else if err == io.ErrUnexpectedEOF { |
| 440 | err = io.EOF |
| 441 | } |
| 442 | dec.remain, n = skipSpacesN(dec.buffer) |
| 443 | d.flags = dec.flags | internalParseFlags(dec.remain) |
| 444 | dec.inputOffset += int64(n) |
| 445 | dec.err = err |
| 446 | } |
| 447 | } |
| 448 | |
| 449 | // DisallowUnknownFields is documented at https://golang.org/pkg/encoding/json/#Decoder.DisallowUnknownFields |
no test coverage detected