code: func (iter *Iterator) Read() interface{} {
  	valueType := iter.WhatIsNext()
  	switch valueType {
  	case StringValue:
  		return iter.ReadString()
  	case NumberValue:
  		if iter.cfg.configBeforeFrozen.UseNumber {
  			return json.Number(iter.readNumberAsString())
  		}
  		return iter.ReadFloat64()
  	case NilValue:
  		iter.skipFourBytes('n', 'u', 'l', 'l')
  		return nil
  	case BoolValue:
  		return iter.ReadBool()
  	case ArrayValue:
  		arr := []interface{}{}
  		iter.ReadArrayCB(func(iter *Iterator) bool {
  			var elem interface{}
  			iter.ReadVal(&elem)
  			arr = append(arr, elem)
  			return true
  		})
  		return arr
  	case ObjectValue:
  		obj := map[string]interface{}{}
  		iter.ReadMapCB(func(Iter *Iterator, field string) bool {
  			var elem interface{}
  			iter.ReadVal(&elem)
  			obj[field] = elem
  			return true
  		})
  		return obj
  	default:
  		iter.ReportError("Read", fmt.Sprintf("unexpected value type: %v", valueType))
  		return nil
  	}
  }
docs: // Read read the next JSON element as generic interface{}.