github.com/RevenueMonster/sqlike@v1.0.6/jsonb/array.go (about)

     1  package jsonb
     2  
     3  // ReadArray :
     4  func (r *Reader) ReadArray(cb func(r *Reader) error) error {
     5  	c := r.nextToken()
     6  	if c == 'n' {
     7  		return r.unreadByte().skipNull()
     8  	}
     9  
    10  	if c != '[' {
    11  		return ErrInvalidJSON{
    12  			callback: "ReadArray",
    13  			message:  "expect start with [ for array",
    14  		}
    15  	}
    16  
    17  	c = r.nextToken()
    18  	if c == ']' { // empty array
    19  		return nil
    20  	}
    21  
    22  	r.unreadByte()
    23  
    24  	for {
    25  		b, err := r.ReadBytes()
    26  		if err != nil {
    27  			return err
    28  		}
    29  
    30  		if cb != nil {
    31  			it := NewReader(b)
    32  			if err := cb(it); err != nil {
    33  				return err
    34  			}
    35  		}
    36  
    37  		c = r.nextToken()
    38  		if c != ',' {
    39  			break
    40  		}
    41  	}
    42  
    43  	if c != ']' {
    44  		return ErrInvalidJSON{
    45  			callback: "ReadArray",
    46  			message:  "expect end with ] for array",
    47  		}
    48  	}
    49  	return nil
    50  }