You can view it that way, and you're not absolutely wrong. Out of bounds access is kind of the typical buffer overflow problem that memory-safe languages mostly solve.
Where however I am in massive disagreement is that it is also very much a JSON design failure. JSON designers wanted so much to stick to JavaScript-style syntax that they allowed C-style escaping to happen inside strings, which I think is a major blunder. In you actually want to represent unicode characters in a string, then a unicode format such as utf-8 (which by the way is also prescribed for JSON) should be used. The onyl thing that really needs to be escaped is the double-quote character itself. If you really want to insist, maybe some others such as "\0".
I always had this major beef with JSON: that you can't actually encode arbitrary things in them. Neither can you encode arbitrary utf-8 in any sort of sane manner, nor any other sort of binary buffer. (When something is known to be purely binary, often a base64 version is encoded as a string as a workaround.)
If you want to look at a sensible implementation for these things you don't have to look further than BSON, which handles both strings and blobs efficiently and without guessing games on the part of the parser. (BSON (Binary JSON): Specification) By the way, BSON is not some unknown things, MongoDB for example actually stores, parses and returns it, and many companies' internal APIs receive and emit application/bson instead of application/json.
The adoption of JSON forces the programmers to deal with parsing unicode, which would not be a terrible burden, but embedded systems that have no space for the usual massive unicode libraries have to implement "something" that can half-parse unicode, because JSON parsing relies on it. These libraries are not widely available, maintaind and reviewed. (You can sort of guess that I'm writing this from experience.)
That these embedded systems are basically forced to accept JSON input for connectivity with everything from NodeRED toa web browser front-end actually forces these sorts of errors.
This absolutely has a lot of relation to the fact that web standards are "turtles all the way down" - let's assume we can parse unicode, then JSON, then that we can validate these safely, then that whatever object hierarchy results from this we can always allocate in memory, etc. Even something as simple as interpreting the "Origin:" header for CORS validation is so convoluted that one of the lead developers on curl got into a public argument on how the name should be canonicalized for purposes of comparison.
Frankly, I don't believe that it's possible to design a small embedded web server that obeys today's standards and can't be exploited in a hundred different ways. Yes, reading past the buffer is an especially grave error, but probably there are many more where this came from.