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