code: func (r *Lexer) Interface() interface{} {
  	if r.token.kind == tokenUndef && r.Ok() {
  		r.FetchToken()
  	}
  
  	if !r.Ok() {
  		return nil
  	}
  	switch r.token.kind {
  	case tokenString:
  		return r.String()
  	case tokenNumber:
  		return r.Float64()
  	case tokenBool:
  		return r.Bool()
  	case tokenNull:
  		r.Null()
  		return nil
  	}
  
  	if r.token.delimValue == '{' {
  		r.consume()
  
  		ret := map[string]interface{}{}
  		for !r.IsDelim('}') {
  			key := r.String()
  			r.WantColon()
  			ret[key] = r.Interface()
  			r.WantComma()
  		}
  		r.Delim('}')
  
  		if r.Ok() {
  			return ret
  		} else {
  			return nil
  		}
  	} else if r.token.delimValue == '[' {
  		r.consume()
  
  		var ret []interface{}
  		for !r.IsDelim(']') {
  			ret = append(ret, r.Interface())
  			r.WantComma()
  		}
  		r.Delim(']')
  
  		if r.Ok() {
  			return ret
  		} else {
  			return nil
  		}
  	}
  	r.errSyntax()
  	return nil
  }
docs: // Interface fetches an interface{} analogous to the 'encoding/json' package.