JSON doesn't really fit very well into Erlang structures (at least in r16; I haven't played with r17 yet); so I don't think not using it is that crazy.
jsx:decode(<<"{\"library\": \"jsxn\", \"awesome?\": true}">>).
#{<<"awesome?">> => true,<<"library">> => <<"jsxn">>}
https://github.com/talentdeficit/jsxnSpeaking of json in general, this reminds me of a part of a talk by Joe Armstrong he gave at the React 2014 conf (K things I know about building Resilient Reactive Sytems)
https://www.youtube.com/watch?v=rQIE22e0cW8
Not related to Erlang necessarily, he talks about how at Ericsson they build these cell phone network-to-internet gateways and now they go to great lengths to pack data as tightly as possible on the communication channel, bit by bit, to conserve shared bandwidth and then "here come the users and shove json across the pipe, what a travesty!" -- it was a funny statement, and I never really thought of it that way. So I guess shoving binary across websockets like N2O is not totally insane.