json-iterator / go

A high-performance 100% compatible drop-in replacement of "encoding/json"
http://jsoniter.com/migrate-from-go-std.html
MIT License
13.33k stars 1.02k forks source link

Only use the tolerateEmptyArrayExtension if no custom unmarshaller is used #702

Open paul-conneqtech opened 3 months ago

paul-conneqtech commented 3 months ago

I ran into an issue when trying to custom unmarshal a struct when the fuzzy decoder is registered.

Scenario is that an element in the json can either be a struct/string/int or a slice to that. To solve that I use a custom struct with an custom unmarshaller.

However if the json I want to decode starts with [ the tolerateEmptyArrayExtension replaces it completly with {}. Even if the array is not empty, as it name of this extension suggests.

To not break functionality I did not change the logic of the decoder itself. Instead I only activate the decoder when the target does not implement the json.Unmarshaler interface. When a struct implements json.Unmarshaler it should handle the possible empty array syntax itself.