HTTP is a text base protocol, but this is mostly about the Headers part of the message. Then the headers should define the body size (via Content-Length
for example, of with the 'Transfer-Encoding: chunked` mode which is a little more complex), an this size is a byte size.
The body content can contain any byte, even the NULL byte if you want, anythings, for an HTTP agent the body is juste a n byte long blob.
This body can even be compressed (via gzip or deflate), and this information is then stored on the headers also.
So there is no problem for transmitting you json in UTF-8 or any other non ascii7 format (like all the iso-* ones).
In terms of size of the body, something like UTF-8 would not make 'every byte bigger', because simple stuff like the digits are in fact 1-byte long characters, even in UTF-8. If you wonder about size of your message the really important setting is the compression format that the HTTP server could apply on the body.