diff --git a/feature_any.go b/feature_any.go
index 7ded0d3..41b86cf 100644
--- a/feature_any.go
+++ b/feature_any.go
@@ -72,6 +72,10 @@ func WrapFloat64(val float64) Any {
 	return &floatAny{baseAny{}, val}
 }
 
+func WrapString(val string) Any {
+	return &stringAny{baseAny{}, nil, val}
+}
+
 func (iter *Iterator) ReadAny() Any {
 	return iter.readAny(nil)
 }
diff --git a/feature_any_string.go b/feature_any_string.go
index d53889f..f7a04e8 100644
--- a/feature_any_string.go
+++ b/feature_any_string.go
@@ -2,6 +2,7 @@ package jsoniter
 
 import (
 	"io"
+	"strconv"
 )
 
 type stringLazyAny struct{
@@ -109,4 +110,80 @@ func (any *stringLazyAny) WriteTo(stream *Stream) {
 func (any *stringLazyAny) GetInterface() interface{} {
 	any.fillCache()
 	return any.cache
+}
+
+type stringAny struct{
+	baseAny
+	err   error
+	val string
+}
+
+func (any *stringAny) Parse() *Iterator {
+	return nil
+}
+
+
+func (any *stringAny) ValueType() ValueType {
+	return String
+}
+
+func (any *stringAny) LastError() error {
+	return any.err
+}
+
+func (any *stringAny) ToBool() bool {
+	str := any.ToString()
+	if str == "false" {
+		return false
+	}
+	for _, c := range str {
+		switch c {
+		case ' ', '\n', '\r', '\t':
+		default:
+			return true
+		}
+	}
+	return false
+}
+
+func (any *stringAny) ToInt() int {
+	parsed, err := strconv.ParseInt(any.val, 10, 64)
+	any.err = err
+	return int(parsed)
+}
+
+func (any *stringAny) ToInt32() int32 {
+	parsed, err := strconv.ParseInt(any.val, 10, 32)
+	any.err = err
+	return int32(parsed)
+}
+
+func (any *stringAny) ToInt64() int64 {
+	parsed, err := strconv.ParseInt(any.val, 10, 64)
+	any.err = err
+	return parsed
+}
+
+func (any *stringAny) ToFloat32() float32 {
+	parsed, err := strconv.ParseFloat(any.val, 32)
+	any.err = err
+	return float32(parsed)
+}
+
+func (any *stringAny) ToFloat64() float64 {
+	parsed, err := strconv.ParseFloat(any.val, 64)
+	any.err = err
+	return parsed
+}
+
+func (any *stringAny) ToString() string {
+	return any.val
+}
+
+func (any *stringAny) WriteTo(stream *Stream) {
+	stream.WriteString(any.val)
+}
+
+func (any *stringAny) GetInterface() interface{} {
+	return any.val
 }
\ No newline at end of file
diff --git a/jsoniter_string_test.go b/jsoniter_string_test.go
index f134afa..7a96ded 100644
--- a/jsoniter_string_test.go
+++ b/jsoniter_string_test.go
@@ -79,6 +79,12 @@ func Test_read_string_as_any(t *testing.T) {
 	should.Equal(123, any.ToInt())
 }
 
+func Test_wrap_string(t *testing.T) {
+	should := require.New(t)
+	any := WrapString("123")
+	should.Equal(123, any.ToInt())
+}
+
 func Test_write_string(t *testing.T) {
 	should := require.New(t)
 	str, err := MarshalToString("hello")