MCPcopy Index your code
hub / github.com/segmentio/encoding / readValue

Method readValue

json/json.go:392–447  ·  view source on GitHub ↗

readValue reads one JSON value from the buffer and returns its raw bytes. It is optimized for the "one JSON value per line" case.

()

Source from the content-addressed store, hash-verified

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.
392func (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

Callers 1

DecodeMethod · 0.95

Calls 3

parseValueMethod · 0.95
skipSpacesNFunction · 0.85
internalParseFlagsFunction · 0.85

Tested by

no test coverage detected