我是Erlang的新手,我的疑问是如何在Erlang中创建一个JSON对象,并在REST API调用中传递该对象。我读了很多帖子,但没有得到任何满意的答案。
- 编辑**
下面我调用API:
offline_message(From, To, #message{type = Type, body = Body}) ->
Type = xml:get_text(Type),
Body = xml:get_text(Body),
Token = gen_mod:get_module_opt(To#jid.lserver, ?MODULE, auth_token, fun(S) -> iolist_to_binary(S) end, list_to_binary("")),
PostUrl = gen_mod:get_module_opt(To#jid.lserver, ?MODULE, post_url, fun(S) -> iolist_to_binary(S) end, list_to_binary("")),
to = To#jid.luser
from = From#jid.luser
if
(Type == <<"chat">>) and (Body /= <<"">>) ->
Sep = "&",
Post = {
"token":binary_to_list(Token),
"from":binary_to_list(from),
"to":binary_to_list(to),
"body":binary_to_list(Body)
},
?INFO_MSG("Sending post request to ~s with body \"~s\"", [PostUrl, Post]),
httpc:request(post, {binary_to_list(PostUrl), [], "application/json", binary_to_list(Post)},[],[]),
ok;
true ->
ok
end.
这里关于JSON字符串的一切都好吗?我正在尝试修改这个module。
1条答案
按热度按时间yks3o0rb1#
如何在Erlang中创建JSON对象
Erlang中没有对象这样的东西,所以简单的答案是:但是,你通过“the wire”发送的只是字符串,你当然可以用erlang创建字符串。
为了让事情变得更简单,你可以使用一个erlang模块,比如jsx来创建你想要在请求中发送的json格式的字符串,但是,为了使用erlang模块,你必须学习一些关于
rebar3
的知识,它是erlang的包安装程序(见What is the easiest way for beginners to install a module?)。请记住,http请求只是一个以某种方式格式化的字符串。http请求以如下行开头:
然后是一些名为 headers 的文本行,如下所示:
然后是几个换行符,后面跟着一些附加文本,称为 *post body *,可以有几种不同的格式(格式应该在
Content-Type
头中声明):为了使组装http请求并将其发送到服务器变得更容易,erlang有一个内置的http客户端,名为
inets
,你可以在here文档中读到它。关于使用inets
的例子,请参见here。因为inets
使用起来有点麻烦,或者你可以使用第三方http客户端,如hackney。再一次,不过,您需要能够使用rebar3
安装hackney
。一旦您发送了请求,就由服务器来破译请求并采取必要的操作过程。