code: func parseAny(json string, i int, hit bool) (int, Result, bool) {
  	var res Result
  	var val string
  	for ; i < len(json); i++ {
  		if json[i] == '{' || json[i] == '[' {
  			i, val = parseSquash(json, i)
  			if hit {
  				res.Raw = val
  				res.Type = JSON
  			}
  			return i, res, true
  		}
  		if json[i] <= ' ' {
  			continue
  		}
  		switch json[i] {
  		case '"':
  			i++
  			var vesc bool
  			var ok bool
  			i, val, vesc, ok = parseString(json, i)
  			if !ok {
  				return i, res, false
  			}
  			if hit {
  				res.Type = String
  				res.Raw = val
  				if vesc {
  					res.Str = unescape(val[1 : len(val)-1])
  				} else {
  					res.Str = val[1 : len(val)-1]
  				}
  			}
  			return i, res, true
  		case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
  			i, val = parseNumber(json, i)
  			if hit {
  				res.Raw = val
  				res.Type = Number
  				res.Num, _ = strconv.ParseFloat(val, 64)
  			}
  			return i, res, true
  		case 't', 'f', 'n':
  			vc := json[i]
  			i, val = parseLiteral(json, i)
  			if hit {
  				res.Raw = val
  				switch vc {
  				case 't':
  					res.Type = True
  				case 'f':
  					res.Type = False
  				}
  				return i, res, true
  			}
  		}
  	}
  	return i, res, false
  }
docs: // parseAny parses the next value from a json string.
  // A Result is returned when the hit param is set.
  // The return values are (i int, res Result, ok bool)