easyjson
easyjson copied to clipboard
Fix null key in map
В данный момент, если мы попытаемся замаршалить что-то такое, без кастомных маршаллеров
test := example.ExampleStruct{
ExampleMap: map[example.ExampleKey]string{
"": "val1",
"key2": "val2",
},
}
то получим
{"example_map":{"":"val1","key2":"val2"}}
Если в тип выше добавить кастомные маршаллеры
func (k ExampleKey) MarshalText() ([]byte, error) {
return []byte(k), nil
}
То получим невалидный json
{"example_map":{null:"val1","key2":"val2"}}
И при попытке его обратно заанмаршалить получим ошибку:
panic: parse error: expected string near offset 20 of 'example_map'
Это происходит из-за использовании функции RawText
func (w *Writer) RawText(data []byte, err error) {
switch {
case w.Error != nil:
return
case err != nil:
w.Error = err
case len(data) > 0:
w.String(string(data))
default:
w.RawString("null")
}
}
Предлагаю убрать возможность возвращения null для ключей мапы, т.к. это приводит к неочевидному поведению