According to the docs, it's possible to get 100% compatibility with the standard lib:
100% compatibility with standard lib
Replace
import "encoding/json"
json.Marshal(&data)
with
import jsoniter "github.com/json-iterator/go"
var json = jsoniter.ConfigCompatibleWithStandardLibrary
json.Marshal(&data)
I found a case in which this doesn't happen: https://go.dev/play/p/fSAa6wRtDKA
The key piece of the above playground is that, if a struct type has a method `MarshalJSON` with a _pointer_ receiver, and if there's a field of of a struct with the non-pointer type, the behavior diverge: the stdlib's `encoding/json` doesn't call `MarshalJSON`, but Jsoniter does. In the playground linked above, this is shown on the serialization of the field `BarNoPtr`.
Now, I'm not claiming that Jsoniter's behavior is _incorrect_ (I think it's reasonable behavior; in the very least, it's much more consistent than stdlib's behavior, as the full playground shows). The issue I'm bringing up is specifically the claim of 100% compatibility when using `jsoniter.ConfigCompatibleWithStandardLibrary`.
According to the docs, it's possible to get 100% compatibility with the standard lib:
var json = jsoniter.ConfigCompatibleWithStandardLibrary json.Marshal(&data)