Have you considered making the encoding even more efficient by omitted key names for required fields, altogether?
e.g.
{
"firstName": "Corrine",
"lastName": "Ziemann",
"title": "Ms.",
"gender": "f",
"zipCode": 75963,
"countryCode": "en",
"birthYear": 1960,
"active": false,
"shoppingCartItems": [
{
"productNumber": 29857,
"amount": 1
},
{
"productNumber": 53409,
"amount": 6
}
]
}
["Corrine", "Ziemann", "Mrs.", false, [
[29857, 1],
[53409, 6]
],{
"gender": "f",
"zipCode": 75963,
"countryCode": "en",
"birthYear": 1960
}
]
Assuming that gender, zipCode, etc. are optional and the other fields are marked as required.
It seems like this could reduce the file size quite significantly.