github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/fuzzy.go (about) 1 package unifi 2 3 import ( 4 "strconv" 5 ) 6 7 type fuzzyFloat float64 8 9 func (f *fuzzyFloat) UnmarshalJSON(b []byte) error { 10 s := string(b) 11 if len(s) == 0 { 12 return nil 13 } 14 // quick'n'dirty unquote 15 if s[0] == '"' && s[len(s)-1] == '"' { 16 s = s[1 : len(s)-1] 17 } 18 // catch empty strings and null 19 if s == "" || s == "null" { 20 return nil 21 } 22 // try to parse 23 v, err := strconv.ParseFloat(s, 64) 24 if err != nil { 25 return err 26 } 27 *f = fuzzyFloat(v) 28 return nil 29 }