diff --git a/gjson.go b/gjson.go index 4cb00e3..cac5e0b 100644 --- a/gjson.go +++ b/gjson.go @@ -106,7 +106,8 @@ func (t Result) Bool() bool { case True: return true case String: - return t.Str != "" && t.Str != "0" && t.Str != "false" + b, err := strconv.ParseBool(t.Str) + return !(!b || err != nil) case Number: return t.Num != 0 } diff --git a/gjson_test.go b/gjson_test.go index 36a4273..eba498f 100644 --- a/gjson_test.go +++ b/gjson_test.go @@ -313,10 +313,25 @@ func TestTypes(t *testing.T) { assert(t, (Result{Type: JSON}).Type.String() == "JSON") assert(t, (Result{Type: 100}).Type.String() == "") // bool - assert(t, (Result{Type: String, Str: "true"}).Bool()) assert(t, (Result{Type: True}).Bool()) assert(t, (Result{Type: False}).Bool() == false) assert(t, (Result{Type: Number, Num: 1}).Bool()) + assert(t, (Result{Type: String, Str: "1"}).Bool()) + assert(t, (Result{Type: String, Str: "T"}).Bool()) + assert(t, (Result{Type: String, Str: "t"}).Bool()) + assert(t, (Result{Type: String, Str: "true"}).Bool()) + assert(t, (Result{Type: String, Str: "True"}).Bool()) + assert(t, (Result{Type: String, Str: "TRUE"}).Bool()) + assert(t, (Result{Type: String, Str: "tRuE"}).Bool() == false) + assert(t, (Result{Type: String, Str: "0"}).Bool() == false) + assert(t, (Result{Type: String, Str: "f"}).Bool() == false) + assert(t, (Result{Type: String, Str: "F"}).Bool() == false) + assert(t, (Result{Type: String, Str: "false"}).Bool() == false) + assert(t, (Result{Type: String, Str: "False"}).Bool() == false) + assert(t, (Result{Type: String, Str: "FALSE"}).Bool() == false) + assert(t, (Result{Type: String, Str: "fAlSe"}).Bool() == false) + assert(t, (Result{Type: String, Str: "random"}).Bool() == false) + // int assert(t, (Result{Type: String, Str: "1"}).Int() == 1) assert(t, (Result{Type: True}).Int() == 1)