Slightly nicer error messages by omitting "root"
diff --git a/mapstructure.go b/mapstructure.go index 8729e96..f953a8b 100644 --- a/mapstructure.go +++ b/mapstructure.go
@@ -48,7 +48,7 @@ return errors.New("val must be an addressable struct") } - return decode("root", m, val) + return decode("", m, val) } // Decodes an unknown data type into a specific reflection value. @@ -236,7 +236,12 @@ panic("field is not valid") } - fieldName = fmt.Sprintf("%s.%s", name, fieldName) + // If the name is empty string, then we're at the root, and we + // don't dot-join the fields. + if name != "" { + fieldName = fmt.Sprintf("%s.%s", name, fieldName) + } + if err := decode(fieldName, rawMapVal.Interface(), field); err != nil { errors = appendErrors(errors, err) }
diff --git a/mapstructure_examples_test.go b/mapstructure_examples_test.go index 847074a..e7449c5 100644 --- a/mapstructure_examples_test.go +++ b/mapstructure_examples_test.go
@@ -55,9 +55,9 @@ // Output: // 5 error(s) decoding: // - // * 'root.Name' expected type 'string', got 'int' - // * 'root.Age' expected type 'int', got 'string' - // * 'root.Emails[0]' expected type 'string', got 'int' - // * 'root.Emails[1]' expected type 'string', got 'int' - // * 'root.Emails[2]' expected type 'string', got 'int' + // * 'Name' expected type 'string', got 'int' + // * 'Age' expected type 'int', got 'string' + // * 'Emails[0]' expected type 'string', got 'int' + // * 'Emails[1]' expected type 'string', got 'int' + // * 'Emails[2]' expected type 'string', got 'int' }
diff --git a/mapstructure_test.go b/mapstructure_test.go index 713e621..c417762 100644 --- a/mapstructure_test.go +++ b/mapstructure_test.go
@@ -293,7 +293,7 @@ t.FailNow() } - if derr.Errors[0] != "'root.Vstring' expected type 'string', got 'int'" { + if derr.Errors[0] != "'Vstring' expected type 'string', got 'int'" { t.Errorf("got unexpected error: %s", err) } }