mirror of
https://github.com/json-iterator/go.git
synced 2025-02-07 19:30:06 +02:00
add Any.ToVal
This commit is contained in:
parent
31afe6450e
commit
514db10f97
@ -19,10 +19,14 @@ type Any interface {
|
|||||||
ToFloat32() float32
|
ToFloat32() float32
|
||||||
ToFloat64() float64
|
ToFloat64() float64
|
||||||
ToString() string
|
ToString() string
|
||||||
|
ToVal(val interface{})
|
||||||
Get(path ...interface{}) Any
|
Get(path ...interface{}) Any
|
||||||
|
// TODO: add Set
|
||||||
Size() int
|
Size() int
|
||||||
Keys() []string
|
Keys() []string
|
||||||
|
// TODO: remove me
|
||||||
GetArray() []Any
|
GetArray() []Any
|
||||||
|
// TODO: remove me
|
||||||
GetObject() map[string]Any
|
GetObject() map[string]Any
|
||||||
GetInterface() interface{}
|
GetInterface() interface{}
|
||||||
WriteTo(stream *Stream)
|
WriteTo(stream *Stream)
|
||||||
@ -50,6 +54,10 @@ func (any *baseAny) GetObject() map[string]Any {
|
|||||||
return map[string]Any{}
|
return map[string]Any{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (any *baseAny) ToVal(obj interface{}) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
func WrapInt32(val int32) Any {
|
func WrapInt32(val int32) Any {
|
||||||
return &int32Any{baseAny{}, val}
|
return &int32Any{baseAny{}, val}
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,12 @@ func (any *arrayLazyAny) ToString() string {
|
|||||||
return *(*string)(unsafe.Pointer(&any.buf))
|
return *(*string)(unsafe.Pointer(&any.buf))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (any *arrayLazyAny) ToVal(val interface{}) {
|
||||||
|
iter := any.cfg.BorrowIterator(any.buf)
|
||||||
|
defer any.cfg.ReturnIterator(iter)
|
||||||
|
iter.ReadVal(val)
|
||||||
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) Get(path ...interface{}) Any {
|
func (any *arrayLazyAny) Get(path ...interface{}) Any {
|
||||||
if len(path) == 0 {
|
if len(path) == 0 {
|
||||||
return any
|
return any
|
||||||
|
@ -94,6 +94,12 @@ func (any *objectLazyAny) ToString() string {
|
|||||||
return *(*string)(unsafe.Pointer(&any.buf))
|
return *(*string)(unsafe.Pointer(&any.buf))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (any *objectLazyAny) ToVal(obj interface{}) {
|
||||||
|
iter := any.cfg.BorrowIterator(any.buf)
|
||||||
|
defer any.cfg.ReturnIterator(iter)
|
||||||
|
iter.ReadVal(obj)
|
||||||
|
}
|
||||||
|
|
||||||
func (any *objectLazyAny) Get(path ...interface{}) Any {
|
func (any *objectLazyAny) Get(path ...interface{}) Any {
|
||||||
if len(path) == 0 {
|
if len(path) == 0 {
|
||||||
return any
|
return any
|
||||||
|
@ -41,6 +41,9 @@ func Test_read_two_element_array_as_any(t *testing.T) {
|
|||||||
stream := NewStream(ConfigDefault, nil, 32)
|
stream := NewStream(ConfigDefault, nil, 32)
|
||||||
any.WriteTo(stream)
|
any.WriteTo(stream)
|
||||||
should.Equal("[1,2]", string(stream.Buffer()))
|
should.Equal("[1,2]", string(stream.Buffer()))
|
||||||
|
arr := []int{}
|
||||||
|
any.ToVal(&arr)
|
||||||
|
should.Equal([]int{1, 2}, arr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_wrap_array(t *testing.T) {
|
func Test_wrap_array(t *testing.T) {
|
||||||
|
@ -22,6 +22,11 @@ func Test_read_object_as_any(t *testing.T) {
|
|||||||
should.Equal(Object, any.ValueType())
|
should.Equal(Object, any.ValueType())
|
||||||
should.Nil(any.LastError())
|
should.Nil(any.LastError())
|
||||||
should.Equal("b", any.GetObject()["a"].ToString())
|
should.Equal("b", any.GetObject()["a"].ToString())
|
||||||
|
obj := struct {
|
||||||
|
A string
|
||||||
|
}{}
|
||||||
|
any.ToVal(&obj)
|
||||||
|
should.Equal("b", obj.A)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_object_lazy_any_get(t *testing.T) {
|
func Test_object_lazy_any_get(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user