Lora packets need to be small and it is not a good practice to send ASCII or JSON. It is advised to pack as much data using byte (or even bit) streams.
Example:
You have to send temperature and humidity value from a sensor which measures temperatures between 0 and 99 degrees celsius and humidity between 0 and 99%. The project specifies that it is enough to receive temperature and humidity values rounded to the closes whole number. Value that you measure and want to send is (eg.) 28 degrees celsius and 54% humidity.
JSON:
A longer JSON would look like this:
{"sensor":{"temp": "28","hum":"54"}}
if we format it a bit, it can get a bit shorter:
{"s":{"t":"28","h":"54"}}
but this is still a long format taking 25 bytes (200 bits).
ASCII:
Using plain ASCII might shorten it to just 6 bytes (48 bits):
T28H54
Or even more to 4 bytes (32 bits) if you know that the first two digits are temperature and the last two humidity
2854
Bit stream:
The most efficient way of sending data (out of these three) would be in a bit stream.
Let us take the values and write them in binary:
28(10) = 00011100(2)
54(10) = 00110110(2)
Now, since the values cannot go over 100, which is in binary 01100100(2), we know that the first bit will never change we can say that if the first bit is 0, the next 7 will be the value of a temperature and if it is 1, the next 7 will be the value of humidity.
Therefore, you would only need to send 2 bytes (16 bits). It is fair to say that there are ways to reduce it further, ways, which will be explained in detail in a different post.
00011100 10110110