code: func NestedStringMap(obj map[string]interface{}, fields ...string) (map[string]string, bool, error) {
  	m, found, err := nestedMapNoCopy(obj, fields...)
  	if !found || err != nil {
  		return nil, found, err
  	}
  	strMap := make(map[string]string, len(m))
  	for k, v := range m {
  		if str, ok := v.(string); ok {
  			strMap[k] = str
  		} else {
  			return nil, false, fmt.Errorf("%v accessor error: contains non-string key in the map: %v is of the type %T, expected string", jsonPath(fields), v, v)
  		}
  	}
  	return strMap, true, nil
  }
docs: // NestedStringMap returns a copy of map[string]string value of a nested field.
  // Returns false if value is not found and an error if not a map[string]interface{} or contains non-string values in the map.