r17 does have maps, here is a jsx version with maps instead of proplists for example.
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.