这在ERLANG中是什么类型的格式。看起来不像JSON吗?
我刚刚使用这在ERLANG中是什么类型的格式。看起来不像JSON吗?,erlang,mqtt,erlang-shell,Erlang,Mqtt,Erlang Shell,我刚刚使用file:write转储了这个变量: file:write_file("/tmp/foo.txt", io_lib:fwrite("~p.\n", [Message])), 这是emqtt中插件代码的一部分。 我想解析这些内容,并在消息变量中获取部分sdfjksdf,在名为topic的变量中获取home/garden/fountain。如何做到这一点。我不认识二郎 {mqtt_message,<<0,5,101,163,106,150,123,212,110,126,0,
file:write
转储了这个变量:
file:write_file("/tmp/foo.txt", io_lib:fwrite("~p.\n", [Message])),
这是emqtt中插件代码的一部分。
我想解析这些内容,并在消息变量中获取部分sdfjksdf,在名为topic的变量中获取home/garden/fountain。如何做到这一点。我不认识二郎
{mqtt_message,<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,0,[],false,false,false,[],
<<"sdfjksdf">>,
{1519,127425,874902}}
在上面的代码中,我必须从Message对象中传递字符串“sdfjksdf”,并用send代替“msg”字符串。
我尝试了++元素(12,Message)++,但它不起作用
然后我尝试了++二进制列表(元素(12,消息))++这也不起作用
如何通过连接将消息对象中的字符串“sdfjksdf”作为JSON字符串中的参数传递到函数中 这是erlang中的一个元组。请参阅:。下面是一个元组,每个元素在单独的一行上:
{
mqtt_message,
<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,
0,
[],
false,
false,
false,
[],
<<"sdfjksdf">>,
{1519,127425,874902}
}
…因此命名为二进制列表
下面是一个将二进制文件转换为字符串的示例:
7> TopicBin = <<"home/garden/fountain">>.
<<"home/garden/fountain">>
8> TopicStr = binary_to_list(TopicBin).
"home/garden/fountain"
9>
接下来,++
操作符是一种快捷方式,它需要字符串参数,因此不能将++
用于二进制文件
然后我尝试了++binary-to-list(元素(12,Message))++
这也不起作用
这项工作:
2> Msg = "sdfjksdf".
"sdfjksdf"
3> Result = "hello " ++ Msg ++ " world".
"hello sdfjksdf world"
在前面,我们讨论了如何将二进制文件转换为字符串(列表)。因此,您可以这样做:
5> Bin = <<"sdfjksdf">>.
<<"sdfjksdf">>
6> Msg = binary_to_list(Bin).
"sdfjksdf"
7> "hello " ++ Msg ++ " world".
在您的函数中:
-module(f).
-compile(export_all).
get_message() ->
{
mqtt_message,
<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,
0,
[],
false,
false,
false,
[],
<<"sdfjksdf">>,
{1519,127425,874902}
}.
on_message_publish(Message, _Env) ->
%io:format("publish ~s~n", [emqttd_message:format(Message)]),
%file:write_file("/tmp/foo.txt", io_lib:fwrite("~p.\n", [Message])),
%inets:start(),
DeviceIdBin = element(12, Message),
DeviceIdStr = binary_to_list(DeviceIdBin),
Method = post,
URL = "http://xyz.in/api/v2/mysql/_table/device",
Header = [{"Api-Key", "1234"}],
Type = "application/json",
Body = "{\"resource\":[{\"deviceid\":\"" ++ DeviceIdStr ++ "\"}]}",
io:format("Body=~s~n", [Body]),
%HTTPOptions = [],
%Options = [],
%R = httpc:request(Method, {URL, Header, Type, Body}, HTTPOptions, Options),
{ok, Message}.
go() ->
Message = get_message(),
on_message_publish(Message, "hello").
-模块(f)。
-编译(全部导出)。
获取消息()->
{
mqtt_消息,
,
未定义,
{,未定义},
,
0,
[],
假,,
假,,
假,,
[],
,
{1519,127425,874902}
}.
关于消息发布(消息,环境)->
%io:format(“publish~s~n”,[emqttd_message:format(message)],
%文件:write_文件(“/tmp/foo.txt”,io_lib:fwrite(“~p.\n”,[Message]),
%inets:start(),
DeviceIdBin=元素(12,消息),
DeviceIdStr=二进制到二进制列表(DeviceIdBin),
方法=员额,
URL=”http://xyz.in/api/v2/mysql/_table/device",
Header=[{“Api密钥”,“1234”}],
Type=“application/json”,
Body=“{\'resource\”:[{\'deviceid\”:\”“++DeviceIdStr++“\”}],
io:format(“Body=~s~n”,[Body]),
%HTTPOptions=[],
%选项=[],
%R=httpc:request(方法,{URL,Header,Type,Body},HTTPOptions,Options),
{好的,留言}。
go()->
Message=获取消息(),
发布消息(消息“你好”)。
在erlang shell中:
5> c(f).
f.erl:29: Warning: variable 'Method' is unused
f.erl:30: Warning: variable 'URL' is unused
f.erl:31: Warning: variable 'Header' is unused
f.erl:32: Warning: variable 'Type' is unused
{ok,f}
6> f:go().
Body={"resource":[{"deviceid":"sdfjksdf"}]}
{ok,{mqtt_message,<<0,5,101,163,106,150,123,212,110,126,0,
0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,0,[],false,false,false,[],
<<"sdfjksdf">>,
{1519,127425,874902}}}
7>
5>c(f)。
f、 erl:29:警告:未使用变量“Method”
f、 erl:30:警告:未使用变量“URL”
f、 erl:31:警告:未使用变量“Header”
f、 erl:32:警告:未使用变量“Type”
{好的,f}
6> f:go()。
正文={“资源”:[{“设备ID”:“sdfjksdf”}]}
{好,{mqtt_消息,,
未定义,
{,未定义},
,0,[],假,假,假,[],
,
{1519,127425,874902}}}
7>
这是erlang中的元组。请参阅:。下面是一个元组,每个元素在单独的一行上:
{
mqtt_message,
<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,
0,
[],
false,
false,
false,
[],
<<"sdfjksdf">>,
{1519,127425,874902}
}
…因此命名为二进制列表
下面是一个将二进制文件转换为字符串的示例:
7> TopicBin = <<"home/garden/fountain">>.
<<"home/garden/fountain">>
8> TopicStr = binary_to_list(TopicBin).
"home/garden/fountain"
9>
接下来,++
操作符是一种快捷方式,它需要字符串参数,因此不能将++
用于二进制文件
然后我尝试了++binary-to-list(元素(12,Message))++
这也不起作用
这项工作:
2> Msg = "sdfjksdf".
"sdfjksdf"
3> Result = "hello " ++ Msg ++ " world".
"hello sdfjksdf world"
在前面,我们讨论了如何将二进制文件转换为字符串(列表)。因此,您可以这样做:
5> Bin = <<"sdfjksdf">>.
<<"sdfjksdf">>
6> Msg = binary_to_list(Bin).
"sdfjksdf"
7> "hello " ++ Msg ++ " world".
在您的函数中:
-module(f).
-compile(export_all).
get_message() ->
{
mqtt_message,
<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,
0,
[],
false,
false,
false,
[],
<<"sdfjksdf">>,
{1519,127425,874902}
}.
on_message_publish(Message, _Env) ->
%io:format("publish ~s~n", [emqttd_message:format(Message)]),
%file:write_file("/tmp/foo.txt", io_lib:fwrite("~p.\n", [Message])),
%inets:start(),
DeviceIdBin = element(12, Message),
DeviceIdStr = binary_to_list(DeviceIdBin),
Method = post,
URL = "http://xyz.in/api/v2/mysql/_table/device",
Header = [{"Api-Key", "1234"}],
Type = "application/json",
Body = "{\"resource\":[{\"deviceid\":\"" ++ DeviceIdStr ++ "\"}]}",
io:format("Body=~s~n", [Body]),
%HTTPOptions = [],
%Options = [],
%R = httpc:request(Method, {URL, Header, Type, Body}, HTTPOptions, Options),
{ok, Message}.
go() ->
Message = get_message(),
on_message_publish(Message, "hello").
-模块(f)。
-编译(全部导出)。
获取消息()->
{
mqtt_消息,
,
未定义,
{,未定义},
,
0,
[],
假,,
假,,
假,,
[],
,
{1519,127425,874902}
}.
关于消息发布(消息,环境)->
%io:format(“publish~s~n”,[emqttd_message:format(message)],
%文件:write_文件(“/tmp/foo.txt”,io_lib:fwrite(“~p.\n”,[Message]),
%inets:start(),
DeviceIdBin=元素(12,消息),
DeviceIdStr=二进制到二进制列表(DeviceIdBin),
方法=员额,
URL=”http://xyz.in/api/v2/mysql/_table/device",
Header=[{“Api密钥”,“1234”}],
Type=“application/json”,
Body=“{\'resource\”:[{\'deviceid\”:\”“++DeviceIdStr++“\”}],
io:format(“Body=~s~n”,[Body]),
%HTTPOptions=[],
%选项=[],
%R=httpc:request(方法,{URL,Header,Type,Body},HTTPOptions,Options),
{好的,留言}。
go()->
Message=获取消息(),
发布消息(消息“你好”)。
在erlang shell中:
5> c(f).
f.erl:29: Warning: variable 'Method' is unused
f.erl:30: Warning: variable 'URL' is unused
f.erl:31: Warning: variable 'Header' is unused
f.erl:32: Warning: variable 'Type' is unused
{ok,f}
6> f:go().
Body={"resource":[{"deviceid":"sdfjksdf"}]}
{ok,{mqtt_message,<<0,5,101,163,106,150,123,212,110,126,0,
0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,0,[],false,false,false,[],
<<"sdfjksdf">>,
{1519,127425,874902}}}
7>
5>c(f)。
f、 erl:29:警告:未使用变量“Method”
f、 erl:30:警告:未使用变量“URL”
f、 erl:31:警告:未使用变量“Header”
f、 erl:32:警告:未使用变量“Type”
{好的,f}
6> f:go()。
正文={“资源”:[{“设备ID”:“sdfjksdf”}]}
{好,{mqtt_消息,,
未定义,
{,未定义},
,0,[],假,假,假,[],
,
{1519,127425,874902}}}
7>
该类型称为元组
,是一种Erlang数据类型。通常可以将其视为固定长度数组。Erlang元组是1索引的。有几种方法可以从元组中提取数据。如果您知道元组的大小,例如:
{_,_,_,_,Message,_,_,_,_,_,_,Topic,_} = {mqtt_message,<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,0,[],false,false,false,[],
<<"sdfjksdf">>,
{1519,127425,874902}}.
或:
您需要找到使用该语法将其附加到JSON正文中的正确方法。请记住,
++
操作对于大型列表无效。该类型称为元组,是Erlang数据类型。通常可以将其视为固定长度数组。Erlang元组是1索引的。有几种方法可以从元组中提取数据。如果您知道元组的大小,例如:
{_,_,_,_,Message,_,_,_,_,_,_,Topic,_} = {mqtt_message,<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,0,[],false,false,false,[],
<<"sdfjksdf">>,
{1519,127425,874902}}.
或:
您需要找到使用该语法将其附加到JSON正文中的正确方法。请记住,++
操作对于大型列表无效。非常感谢您的回答。我现在明白了。你能告诉我上面元组中的符号是什么意思吗。是空的Erlang二进制数据类型这可以有一些整数或上面的字符。谢谢,我
element(12, {mqtt_message,<<0,5,101,163,106,150,123,212,110,126,0,0,76,244,0,3>>,
undefined,
{<<"1852fadb884d46c7a349f6a974846ce1">>,undefined},
<<"home/garden/fountain">>,0,[],false,false,false,[],
<<"sdfjksdf">>,
{1519,127425,874902}})
42> Msg = binary:bin_to_list(element(12,Message)).
"sdfjksdf"
43> "test: " ++ Msg.
"test: sdfjksdf"