code: func CompleteJsonUnmarshal(b []byte, iface interface{}) error {
  	keys, err := JsonKeys(b)
  	if err != nil {
  		return err
  	}
  
  	structType := reflect.ValueOf(iface).Type()
  
  	for _, key := range keys {
  		_, found := structType.FieldByNameFunc(func(name string) bool {
  			structField, _ := structType.FieldByName(name)
  			jsonTag := structField.Tag.Get("json")
  			jsonName := strings.Split(jsonTag, ",")[0]
  			if jsonName == key {
  				return true
  			}
  			if strings.EqualFold(key, structField.Name) {
  				return true
  			}
  			return false
  		})
  		if !found {
  			// We encountered a json key that there was no corresponding struct
  			// field for; this is not complete
  			return errors.New("Unrecognized key: " + key)
  		}
  	}
  	return nil
  }
docs: // CompleteJsonUnmarshal determines if a given struct has members corresponding
  // to every key of a json object (passed as the json string).
  // By default, Go ignores fields in an object which have no corresponding struct
  // member and this can be used to determine if this ignoring has occurred
  // Errors will result in "false" as a return value