I think a more 'popular' pattern is is to base64 encode the JSON. This is how we do it (tracking pixels/get requests), and lots of analytics/ad tech uses that pattern as well. But I'm not sure on the compression/size.
Example #1 (short string):
input: 103 bytes
gzip(input): 87 bytes
base64(gzip(input)): 117 bytes
Example #2 (long string): input: 3122 bytes
gzip(input): 840 bytes
base64(gzip(input)): 1121 bytes