package util import ( "bytes" "encoding/json" "fmt" ) // FlexibleBool 兼容 JSON 布尔值和常见字符串布尔值。 // 用于请求入口的宽松解析,避免上游/客户端把 "true" 当字符串时直接炸掉。 type FlexibleBool bool // Bool 返回原生布尔值。 func (b FlexibleBool) Bool() bool { return bool(b) } // UnmarshalJSON 支持 true/false、"true"/"false" 以及 ParseBool 可识别的字符串。 func (b *FlexibleBool) UnmarshalJSON(data []byte) error { trimmed := bytes.TrimSpace(data) switch { case len(trimmed) == 0, bytes.Equal(trimmed, []byte("null")): *b = false return nil case bytes.Equal(trimmed, []byte("true")): *b = true return nil case bytes.Equal(trimmed, []byte("false")): *b = false return nil } var raw string if err := json.Unmarshal(trimmed, &raw); err != nil { return err } val, ok := ParseBool(raw) if !ok { return fmt.Errorf("invalid boolean value %q", raw) } *b = FlexibleBool(val) return nil }