If you compress the json first, it isn't quite so bad.
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