Why bitcoin protocol does not use JSON instead of low level data structures? Wouldn't be easier for the nodes to just build the messages with JSON, then encode it to bytes so it can be transmitted over TCP/IP? I'm not talking about JSON-RPC, but the communication between nodes.
It would:


Use significantly more CPU to parse the incoming data (and running a node is already intensive, especially when processing an incoming block).
Use significantly more bandwidth.


It would not:


Remove the need for nodes to know about the binary format, as that is used for defining the (protocol-defined) hashes of transactions, blocks, and other structures.


So if you're going to need to implement the binary format anyway for hashing, why bother implementing another more expensive, less efficient layer on top, and incur the complexity of the conversion?