code: func (json *JSON) GetWithType(name string, typ reflect.Type) (interface{}, bool) {
  	value := json.fetch(name)
  	if value.IsArray() && typ.Kind() == reflect.Slice {
  		array := value.Array()
  		result := reflect.MakeSlice(typ, len(array), len(array))
  		elmType := typ.Elem()
  
  		for i, elm := range array {
  			elmValue, valid := json.convert(elm, elmType)
  			if !valid {
  				return nil, false
  			}
  
  			result.Index(i).Set(reflect.ValueOf(elmValue))
  		}
  		return result.Interface(), true
  	}
  
  	return json.convert(value, typ)
  }
docs: // GetWithType returns value given from given name and type.
  // second return value will only be false if the type of parameter is not convertible to requested type.
  // If value is not convertible to type, it'll return nil, false
  // If value is not exists, it will return nil, true