From 9e98b0c753ff2b8f0b323929c9c60fe7951d0f45 Mon Sep 17 00:00:00 2001 From: Masaaki Goshima Date: Tue, 2 Dec 2025 12:31:53 +0900 Subject: [PATCH] Fix decoding of integer keys of map type (#829) * fix decoding integer keys of map type * use createDecodedNewValue for map key --- decode.go | 7 ++----- decode_test.go | 8 ++++++++ 2 files changed, 10 insertions(+), 5 deletions(-) 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) {