code: func (dec *Decoder) traverseInMap(byField bool) {
  	n := dec.curr.Type()
  	makeAndAppend := func() {
  		if dec.maps == nil {
  			dec.maps = make(pathMaps, 0, 500)
  		}
  		m := reflect.New(n.Elem()).Elem()
  		if byField {
  			dec.maps = append(dec.maps, &pathMap{dec.curr, dec.field, m, dec.path})
  		} else {
  			dec.maps = append(dec.maps, &pathMap{dec.curr, dec.bracket, m, dec.path})
  		}
  		dec.curr = m
  	}
  	if dec.curr.IsNil() {
  		// map is nil
  		dec.curr.Set(reflect.MakeMap(n))
  		makeAndAppend()
  	} else {
  		// map is not nil, so try find value by the key
  		var a *pathMap
  		if byField {
  			a = dec.maps.find(dec.curr, dec.field)
  		} else {
  			a = dec.maps.find(dec.curr, dec.bracket)
  		}
  		if a == nil {
  			// the key not exists
  			makeAndAppend()
  		} else {
  			dec.curr = a.value
  		}
  	}
  }
docs: // walkMap puts in d.curr the map concrete for decode the current value