Erlang jsx:encode 删除转义反斜杠
Erlang jsx:encode remove escape backslash
我正在调用具有以下 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 应用于 "Body1" 时,结果是:
[{\"user\":{\"uid\":\"My-id-1234\"},\"access_token\":\"12345678ff4089\"}]
如何摆脱转义“\”?
您的字符串不包含任何 \
。由于您使用 ~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
我正在调用具有以下 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 应用于 "Body1" 时,结果是:
[{\"user\":{\"uid\":\"My-id-1234\"},\"access_token\":\"12345678ff4089\"}]
如何摆脱转义“\”?
您的字符串不包含任何 \
。由于您使用 ~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