...

Source file src/github.com/json-iterator/go/iter_array.go

Documentation: github.com/json-iterator/go

     1  package jsoniter
     2  
     3  // ReadArray read array element, tells if the array has more element to read.
     4  func (iter *Iterator) ReadArray() (ret bool) {
     5  	c := iter.nextToken()
     6  	switch c {
     7  	case 'n':
     8  		iter.skipThreeBytes('u', 'l', 'l')
     9  		return false // null
    10  	case '[':
    11  		c = iter.nextToken()
    12  		if c != ']' {
    13  			iter.unreadByte()
    14  			return true
    15  		}
    16  		return false
    17  	case ']':
    18  		return false
    19  	case ',':
    20  		return true
    21  	default:
    22  		iter.ReportError("ReadArray", "expect [ or , or ] or n, but found "+string([]byte{c}))
    23  		return
    24  	}
    25  }
    26  
    27  // ReadArrayCB read array with callback
    28  func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) {
    29  	c := iter.nextToken()
    30  	if c == '[' {
    31  		if !iter.incrementDepth() {
    32  			return false
    33  		}
    34  		c = iter.nextToken()
    35  		if c != ']' {
    36  			iter.unreadByte()
    37  			if !callback(iter) {
    38  				iter.decrementDepth()
    39  				return false
    40  			}
    41  			c = iter.nextToken()
    42  			for c == ',' {
    43  				if !callback(iter) {
    44  					iter.decrementDepth()
    45  					return false
    46  				}
    47  				c = iter.nextToken()
    48  			}
    49  			if c != ']' {
    50  				iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c}))
    51  				iter.decrementDepth()
    52  				return false
    53  			}
    54  			return iter.decrementDepth()
    55  		}
    56  		return iter.decrementDepth()
    57  	}
    58  	if c == 'n' {
    59  		iter.skipThreeBytes('u', 'l', 'l')
    60  		return true // null
    61  	}
    62  	iter.ReportError("ReadArrayCB", "expect [ or n, but found "+string([]byte{c}))
    63  	return false
    64  }
    65  

View as plain text