package xiaomi import ( "fmt" "strconv" ) // map → 类型安全提取工具函数 func strVal(m map[string]interface{}, key string) string { if v, ok := m[key]; ok { if s, ok := v.(string); ok { return s } } return "" } func intVal(m map[string]interface{}, key string) int { if v, ok := m[key]; ok { switch n := v.(type) { case float64: return int(n) case int: return n case int64: return int(n) } } return 0 } func boolVal(m map[string]interface{}, key string) bool { if v, ok := m[key]; ok { if b, ok := v.(bool); ok { return b } } return false } func strSliceVal(m map[string]interface{}, key string) []string { if v, ok := m[key]; ok { if arr, ok := v.([]string); ok { return arr } if arr, ok := v.([]interface{}); ok { result := make([]string, 0, len(arr)) for _, item := range arr { if s, ok := item.(string); ok { result = append(result, s) } } return result } } return nil } func toFloat64(v interface{}) float64 { switch n := v.(type) { case float64: return n case float32: return float64(n) case int: return float64(n) case int64: return float64(n) case string: // Some APIs return coordinates as strings var f float64 fmt.Sscanf(n, "%f", &f) return f } return 0 } func int64FromStr(s string) int64 { v, _ := strconv.ParseInt(s, 10, 64) return v }