diff options
Diffstat (limited to 'src/encoding/json/decode.go')
| -rw-r--r-- | src/encoding/json/decode.go | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/src/encoding/json/decode.go b/src/encoding/json/decode.go index 0a1cadf42e..53470d8c88 100644 --- a/src/encoding/json/decode.go +++ b/src/encoding/json/decode.go @@ -690,20 +690,9 @@ func (d *decodeState) object(v reflect.Value) error { } subv = mapElem } else { - var f *field - if i, ok := fields.nameIndex[string(key)]; ok { - // Found an exact name match. - f = &fields.list[i] - } else { - // Fall back to the expensive case-insensitive - // linear search. - for i := range fields.list { - ff := &fields.list[i] - if ff.equalFold(ff.nameBytes, key) { - f = ff - break - } - } + f := fields.byExactName[string(key)] + if f == nil { + f = fields.byFoldedName[string(foldName(key))] } if f != nil { subv = v |
