i see no need for using a general purpose json parser for a very specific protocol, as a general purpose implementation, if it's not generated code, it's going to be slower due to reflect and if it's generated code the complexity of the generated code will account for cases that are not present in the actual use case
the json parsing i have inside the event, envelopes and filters are custom made for the task and are as lazy as possible so they are fast, and the code is easier to debug
i wrote a cut down version of bytes.Buffer that has special elements for recognising and cutting out strings, escaping that is specified in NIP-01, and it can scan through a whole object inside an envelope without parsing just looking for the bounds of the object and pass it to a more detailed process