// Dynamic data type handling

type PerformanceData struct {
    Values []interface{} `json:"performance_data"`
}

type PerformanceObject struct {
    Min   int    `json:"min"`
    Max   int    `json:"max"`
    Label string `json:"label"`
}

jsonData := []byte(`{
    "performance_data": [
        "value1",
        {"min": 10, "max": 20, "label": "value2"}
    ]
}`)

var data PerformanceData
err := json.Unmarshal(jsonData, &data)
if err != nil {
    panic(err)
}

for _, value := range data.Values {
    switch v := value.(type) {
    case string:
        fmt.Println("String value:", v)
    case map[string]interface{}:
        obj := PerformanceObject{
            Min:   int(v["min"].(float64)),
            Max:   int(v["max"].(float64)),
            Label: v["label"].(string),
        }
        fmt.Println("Object value:", obj)
    }
}
