func (this *DashTemplateEvaluator) evalValue(source *simplejson.Json) interface{} { sourceValue := source.Interface() switch v := sourceValue.(type) { case string: interpolated := this.varRegex.ReplaceAllStringFunc(v, func(match string) string { if replacement, exists := this.variables[match]; exists { return replacement } else { return match } }) return interpolated case bool: return v case json.Number: return v case map[string]interface{}: return this.evalObject(source) case []interface{}: array := make([]interface{}, 0) for _, item := range v { array = append(array, this.evalValue(simplejson.NewFromAny(item))) } return array } return nil }