erlang 如何创建JSON对象并将其传递到REST API调用中?

4urapxun  于 2022-12-20  发布在  Erlang
关注(0)|答案(1)|浏览(209)

我是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

yks3o0rb

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请求以如下行开头:

POST /some/path HTTP/1.1

然后是一些名为 headers 的文本行,如下所示:

User-Agent: Mozilla-yah-yah-bah
Content-Type: application/json
Content-Length: 103

然后是几个换行符,后面跟着一些附加文本,称为 *post body *,可以有几种不同的格式(格式应该在Content-Type头中声明):

Format                 Content-Type
    ------                 -----------
   "x=1&y=2"               application/x-www-form-urlencoded
   "{x:1, y:2}"            application/json
   "more complex string"   multipart/form-data

为了使组装http请求并将其发送到服务器变得更容易,erlang有一个内置的http客户端,名为inets,你可以在here文档中读到它。关于使用inets的例子,请参见here。因为inets使用起来有点麻烦,或者你可以使用第三方http客户端,如hackney。再一次,不过,您需要能够使用rebar3安装hackney
一旦您发送了请求,就由服务器来破译请求并采取必要的操作过程。

相关问题