diff --git a/decode.go b/decode.go index 43c317f..a1b5d50 100644 --- a/decode.go +++ b/decode.go @@ -1750,14 +1750,11 @@ func (d *Decoder) decodeMap(ctx context.Context, dst reflect.Value, src ast.Node return err } } else { - keyVal, err := d.nodeToValue(ctx, key) + keyVal, err := d.createDecodedNewValue(ctx, keyType, reflect.Value{}, key) if err != nil { return err } - k = reflect.ValueOf(keyVal) - if k.IsValid() && k.Type().ConvertibleTo(keyType) { - k = k.Convert(keyType) - } + k = keyVal } if k.IsValid() { diff --git a/decode_test.go b/decode_test.go index 2d56942..ccd2b59 100644 --- a/decode_test.go +++ b/decode_test.go @@ -1280,6 +1280,14 @@ c: source: `"\uD83D\uDE00a\uD83D\uDE01"`, value: "😀a😁", }, + { + source: "42: 100", + value: map[string]any{"42": 100}, + }, + { + source: "42: 100", + value: map[int]any{42: 100}, + }, } for _, test := range tests { t.Run(test.source, func(t *testing.T) {