Working with json in Erlang has vastly improved since the last time I looked at it, particularly with the addition of maps to the language (in R17).
-module(foo_handler). -export([init/3]). -export([allowed_methods/2, content_types_accepted/2]). -export([foo/2]). init(_Transport, _Req, []) -> {upgrade, protocol, cowboy_rest}. allowed_methods(Req, State) -> {[<<"POST">>], Req, State}. content_types_accepted(Req, State) -> {[ {<<"application/json">>, foo} ], Req, State}. foo(Req, State) -> {ok, Body, Req1} = cowboy_req:body(Req), Json = jiffy:decode(Body, [return_maps]), Bar = maps:get(<<"bar">>, Json), {ok, Res} = do_something(Bar), Body = jiffy:encode(#{result => Res}), {true, cowboy_req:set_resp_body(Body, Req1), State}.
thanks you, very helpful!