It's sad, but many developers actually count on JSON key ordering. Why, I don't know, but they do. Why people like to code to the implementation, not the spec, I do not know.
I've dealt with one of these. EAN, the Expedia Affiliate Network[0], has an API with what they call an "XML" mode and a "REST" mode, where "REST" means JSON. The "REST" mode is very clearly translated directly from the XML mode. I'm simplifying and doing this from memory so bear with me, but here is how translation works:
<Hotel id="1">
<Amenity>Bacon</Amenity>
</Hotel>
turns into
{'Hotel': {'@id': '1',
'Amenity': 'Bacon'}}
Straight forward enough. But here's what happens when you have two <Amenity> elements:
The translation engine appears to have no knowledge of the schema, it just adds ___List and ___s entries. So the schema of the JSON is different based on the presence of a repeated element
Also since it doesn't have any knowledge of the schema, all elements are textual except the special @size element.
Because @size is a special element for these lists (which of course you have no need for in JSON), but the engine turns XML attributes into @____ as well, there is no way to get at the actual "size" attribute if one exists.
It has a reasonably decent (highly decent for a header file) description.
One thing I had to take a guess at is that, in JEntry, the header is a combination of a bit mask and an offset. I also would guess that offsets for identical keys (can happen in nested json), and maybe offsets for other identical data will be identical. I didn't check either.
tl;dr storing json in a way that doesn't mean repeatedly parsing it to make updates