Erlang 如何创建JSON对象并在RESTAPI调用中传递它?

Erlang 如何创建JSON对象并在RESTAPI调用中传递它?,erlang,ejabberd-module,Erlang,Ejabberd Module,我是Erlang新手,我的疑问是如何在Erlang中创建JSON对象并在RESTAPI调用中传递该对象。我读了很多帖子,但没有得到满意的答案 编辑 我在这里调用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.lserv

我是Erlang新手,我的疑问是如何在Erlang中创建JSON对象并在RESTAPI调用中传递该对象。我读了很多帖子,但没有得到满意的答案

编辑

我在这里调用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.
offline_消息(从,到,#消息{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)->iolist_To_binary结尾,list_To_binary(“”),
postrl=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
如果
(Type==)和(Body/=)->
Sep=“&”,
职位={
“令牌”:二进制到二进制列表(令牌),
“from”:二进制到二进制列表(from),
“至”:二进制至二进制列表(至),
“body”:二进制对象列表(body)
},
?信息消息(“将post请求发送到带有正文\“~s\”,[postrl,post]),
httpc:request(post,{binary_-to-u-list(postrl),[],“application/json”,binary_-to-u-list(post)},[],[],
好啊
正确->
好啊
结束。
关于JSON字符串,这里一切正常吗。我正在尝试修改这个

如何在Erlang中创建JSON对象

erlang中没有对象这样的东西,所以简单的答案是:你不能。然而,您通过线路发送的东西只是字符串,您当然可以使用erlang创建字符串

为了简化操作,可以使用erlang模块创建要在请求中发送的json格式字符串。但是,为了使用erlang模块,您必须了解一些关于
rebar3
,这是erlang的软件包安装程序(请参阅)

请记住,http请求只是以某种方式格式化的字符串。http请求以如下行开头:

POST /some/path HTTP/1.1
然后有一些称为标题的文本行,看起来像:

User-Agent: Mozilla-yah-yah-bah
Content-Type: application/json
Content-Length: 103
然后是两个换行符,后面是一些附加文本,称为post body,可以采用几种不同的格式(格式应在
内容类型
标题中声明):

为了更容易地组装http请求并将其发送到服务器,erlang有一个名为
inets
的内置http客户机,您可以在文档中阅读。有关使用
inets
的示例,请参阅。由于
inets
使用起来有点麻烦,您也可以使用第三方http客户端,如。不过,您还需要能够使用
rebar3
安装
hackney


发送请求后,服务器将对请求进行解密,并采取必要的行动。

您好,有没有任何方法可以在不使用任何模块的情况下创建JSON字符串,请检查我的问题我已经更新了我的question@VirendraVarma当然下面是一个例子:
“{\'a\':1,\'b\':2}”
。真正的问题是http客户端需要什么类型的数据?在您发布的代码中,以
Post=
开头的行不是用erlang编写的。之前有什么?@VirendraVarma,我查看了您发布的链接上的代码,应该为Post变量分配一个字符串列表,或者您也可以为Post分配一个包含一个字符串的列表。一般来说,erlang的io模块不关心它们是得到一个包含整个字符串的列表,还是一个包含多个字符串段的列表。
    Format                 Content-Type
    ------                 -----------
   "x=1&y=2"               application/x-www-form-urlencoded
   "{x:1, y:2}"            application/json
   "more complex string"   multipart/form-data