mirror of
https://github.com/json-iterator/go.git
synced 2025-04-01 21:24:21 +02:00
wrap string
This commit is contained in:
parent
cf4113fc22
commit
fa16f3c75c
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
@ -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")
|
||||
|
Loading…
x
Reference in New Issue
Block a user