code: func ArrayEach(data []byte, cb func(value []byte, dataType ValueType, offset int, err error), keys ...string) (offset int, err error) {
  	if len(data) == 0 {
  		return -1, MalformedObjectError
  	}
  
  	offset = 1
  
  	if len(keys) > 0 {
  		if offset = searchKeys(data, keys...); offset == -1 {
  			return offset, KeyPathNotFoundError
  		}
  
  		// Go to closest value
  		nO := nextToken(data[offset:])
  		if nO == -1 {
  			return offset, MalformedJsonError
  		}
  
  		offset += nO
  
  		if data[offset] != '[' {
  			return offset, MalformedArrayError
  		}
  
  		offset++
  	}
  
  	nO := nextToken(data[offset:])
  	if nO == -1 {
  		return offset, MalformedJsonError
  	}
  
  	offset += nO
  
  	if data[offset] == ']' {
  		return offset, nil
  	}
  
  	for true {
  		v, t, o, e := Get(data[offset:])
  
  		if e != nil {
  			return offset, e
  		}
  
  		if o == 0 {
  			break
  		}
  
  		if t != NotExist {
  			cb(v, t, offset+o-len(v), e)
  		}
  
  		if e != nil {
  			break
  		}
  
  		offset += o
  
  		skipToToken := nextToken(data[offset:])
  		if skipToToken == -1 {
  			return offset, MalformedArrayError
  		}
  		offset += skipToToken
  
  		if data[offset] == ']' {
  			break
  		}
  
  		if data[offset] != ',' {
  			return offset, MalformedArrayError
  		}
  
  		offset++
  	}
  
  	return offset, nil
  }
docs: // ArrayEach is used when iterating arrays, accepts a callback function with the same return arguments as `Get`.