I think you have to make/have some assumptions about the "json" that are always true. If for example the json objects always have a fixed order of attributes, that could help very much, especially if only single attributes are problematic.
I would try to match
and then replace with the help of some "fixer" function, that probably just uses the capture groups and re-encodes some ad-hoc created object back into actually valid json. One variation would be, to expand the (.*?) to only match when something is wrong.
However, the whole approach gets more complicated with optional attributes and even more so with a flexible order of attributes (all of which might still be manageable).
As you very well may have noticed, this only works if the assumption at the top is true. Depending on the assumptions you can make, the solution can be very simple. However, it all gets unwieldy, if these malformed Elements are completely irregular. So ... best of luck, I guess. Please post the assumptions about the json you believe to be true, if you need further assistance. If there are none however, a program would have to guess, what's actually meant. I mean, someone could mean: