1
0
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:
Tao Wen
2017-07-17 09:09:00 +08:00
parent 0d604da7d7
commit 9b3ec40fd9
10 changed files with 55 additions and 40 deletions

View File

@ -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 {