code: func (n *NameProvider) GetJSONNames(subject interface{}) []string {
  	n.lock.Lock()
  	defer n.lock.Unlock()
  	tpe := reflect.Indirect(reflect.ValueOf(subject)).Type()
  	names, ok := n.index[tpe]
  	if !ok {
  		names = n.makeNameIndex(tpe)
  	}
  
  	res := make([]string, 0, len(names.jsonNames))
  	for k := range names.jsonNames {
  		res = append(res, k)
  	}
  	return res
  }
docs: // GetJSONNames gets all the json property names for a type