You've already forked json-iterator
mirror of
https://github.com/json-iterator/go.git
synced 2025-07-12 23:50:19 +02:00
#133 fix empty struct skip; fix ] as empty array
This commit is contained in:
@ -13,7 +13,7 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
|
||||
}
|
||||
switch len(fields) {
|
||||
case 0:
|
||||
return &skipDecoder{typ}, nil
|
||||
return &skipObjectDecoder{typ}, nil
|
||||
case 1:
|
||||
for fieldName, fieldDecoder := range fields {
|
||||
fieldHash := calcHash(fieldName)
|
||||
@ -449,15 +449,17 @@ func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
|
||||
}
|
||||
}
|
||||
|
||||
type skipDecoder struct {
|
||||
type skipObjectDecoder struct {
|
||||
typ reflect.Type
|
||||
}
|
||||
|
||||
func (decoder *skipDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||
iter.Skip()
|
||||
if iter.Error != nil && iter.Error != io.EOF {
|
||||
iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
|
||||
func (decoder *skipObjectDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||
valueType := iter.WhatIsNext()
|
||||
if valueType != Object && valueType != Nil {
|
||||
iter.ReportError("skipObjectDecoder", "expect object or null")
|
||||
return
|
||||
}
|
||||
iter.Skip()
|
||||
}
|
||||
|
||||
type oneFieldStructDecoder struct {
|
||||
|
Reference in New Issue
Block a user