diff --git a/feature_any_object.go b/feature_any_object.go index 7382233..dd2bf41 100644 --- a/feature_any_object.go +++ b/feature_any_object.go @@ -25,9 +25,7 @@ func (any *objectLazyAny) LastError() error { } func (any *objectLazyAny) ToBool() bool { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - return iter.ReadObject() != "" + return true } func (any *objectLazyAny) ToInt() int { diff --git a/feature_any_string.go b/feature_any_string.go index e3dcd6a..e76c275 100644 --- a/feature_any_string.go +++ b/feature_any_string.go @@ -35,7 +35,7 @@ func (any *stringAny) LastError() error { func (any *stringAny) ToBool() bool { str := any.ToString() - if str == "false" { + if str == "0" { return false } for _, c := range str { diff --git a/jsoniter_any_bool_test.go b/jsoniter_any_bool_test.go index 7344f4d..85d332b 100644 --- a/jsoniter_any_bool_test.go +++ b/jsoniter_any_bool_test.go @@ -1,12 +1,44 @@ package jsoniter import ( - "github.com/json-iterator/go/require" + "fmt" "testing" + + "github.com/json-iterator/go/require" ) +var boolConvertMap = map[string]bool{ + "true": true, + "false": false, + + `"true"`: true, + `"false"`: true, + + "123": true, + "0": false, + `"0"`: false, + "-1": true, + + "1.1": true, + "0.0": false, + "-1.1": true, + `""`: false, + "[1,2]": true, + "[]": false, + "{}": true, + `{"abc":1}`: true, +} + func Test_read_bool_as_any(t *testing.T) { should := require.New(t) - any := Get([]byte("true")) - should.True(any.ToBool()) + + var any Any + for k, v := range boolConvertMap { + any = Get([]byte(k)) + if v { + should.True(any.ToBool(), fmt.Sprintf("origin val is %v", k)) + } else { + should.False(any.ToBool(), fmt.Sprintf("origin val is %v", k)) + } + } } diff --git a/jsoniter_any_string_test.go b/jsoniter_any_string_test.go index f17a111..1567bdc 100644 --- a/jsoniter_any_string_test.go +++ b/jsoniter_any_string_test.go @@ -1,8 +1,9 @@ package jsoniter import ( - "github.com/json-iterator/go/require" "testing" + + "github.com/json-iterator/go/require" ) func Test_read_string_as_any(t *testing.T) { @@ -13,7 +14,7 @@ func Test_read_string_as_any(t *testing.T) { any = Get([]byte(`" "`)) should.False(any.ToBool()) any = Get([]byte(`"false"`)) - should.False(any.ToBool()) + should.True(any.ToBool()) any = Get([]byte(`"123"`)) should.Equal(123, any.ToInt()) }