MCPcopy Create free account
hub / github.com/buger/jsonparser / scanComposite

Method scanComposite

reader_parser.go:515–552  ·  view source on GitHub ↗

SYS-REQ-116

(retain bool, opening byte)

Source from the content-addressed store, hash-verified

513
514// SYS-REQ-116
515func (rp *ReaderParser) scanComposite(retain bool, opening byte) error {
516 stack := []byte{closingDelimiter(opening)}
517 rp.pos++
518
519 for len(stack) > 0 {
520 b, err := rp.peekByte(retain)
521 if err != nil {
522 if err == io.EOF {
523 if opening == '[' {
524 return MalformedArrayError
525 }
526 return MalformedObjectError
527 }
528 return err
529 }
530
531 if b == '"' || (b == '\'' && rp.config.AllowSingleQuotes) {
532 if err := rp.scanString(retain); err != nil {
533 return err
534 }
535 continue
536 }
537
538 switch b {
539 case '{':
540 stack = append(stack, '}')
541 case '[':
542 stack = append(stack, ']')
543 case '}', ']':
544 if b != stack[len(stack)-1] {
545 return MalformedJsonError
546 }
547 stack = stack[:len(stack)-1]
548 }
549 rp.pos++
550 }
551 return nil
552}
553
554// SYS-REQ-116
555func closingDelimiter(opening byte) byte {

Callers 1

scanValueMethod · 0.95

Calls 3

peekByteMethod · 0.95
scanStringMethod · 0.95
closingDelimiterFunction · 0.85

Tested by

no test coverage detected