Erlang jsx:编码删除转义反斜杠

时间:2017-04-27 16:15:05

标签: json erlang encode jsx

我正在调用具有以下json要求的Api服务:

    {
       "user": {
         "userid": "123456"  
       },
      "access_token": "ABCDEFGHIJKLMPNOPQRST"
    }

我在我的代码中执行以下操作:

   MyUser =  {<<"uid">>, <<"MyId-1">>},
   Body = json_body_([{{<<"user">>, MyUser},{<<"access_token">>, <<?ORGANIZATION_ACCESS_TOKEN>>}}]),
   Body1 = lists:map(fun erlang:tuple_to_list/1, Body), 
   io:format("Body in start : ~n~p~n", [Body1]).

    json_body_(ParamList) ->
        json_body__(ParamList, []).

    json_body__([], Acc) ->
        jsx:encode(lists:reverse(Acc));
    json_body__([{K, V} | Rest], Acc) ->
        Acc1 = [{sanitize_(K), sanitize_(V)} | Acc],
    json_body__(Rest, Acc1).
    sanitize_(Parm) ->
        Parm.

当我将jsx:enocode应用于&#34; Body1&#34;结果是:

    [{\"user\":{\"uid\":\"My-id-1234\"},\"access_token\":\"12345678ff4089\"}]

如何摆脱逃脱&#34; \&#34;?

1 个答案:

答案 0 :(得分:3)

您的字符串不包含任何\。由于您使用~p打印,因此Erlang对字符串中的每个双引号进行了转义,以使最终输出有效的Erlang代码。您可以使用~s进行打印来验证这一点。

1> S = "{\"foo\": \"bar\"}".
"{\"foo\": \"bar\"}"
2> io:format("~p~n", [S]).
"{\"foo\": \"bar\"}"
ok
3> io:format("~s~n", [S]).
{"foo": "bar"}
ok