Json Erlang-将字符串转换为二进制文件

Json Erlang-将字符串转换为二进制文件,json,binary,erlang,Json,Binary,Erlang,有没有什么好方法可以将列表/元组中的字符串转换为二进制数据? 例如: 输入: [{"start", [{"data", [{"number",[{"@id","333"},{"#text","test message"}]}, {"data","current date"}]}, {"mass", [{"client","35"}, {"address","lattitude"}, {"code","3454343"}, {"foo",[{"@tipo","casa"},{"#text","So

有没有什么好方法可以将列表/元组中的字符串转换为二进制数据? 例如:

输入:

[{"start", [{"data", [{"number",[{"@id","333"},{"#text","test message"}]}, {"data","current date"}]}, {"mass", [{"client","35"}, {"address","lattitude"}, {"code","3454343"}, {"foo",[{"@tipo","casa"},{"#text","Some text message 2"}]}, {"product","TEST"}]}]}]
输出:

[{<<"start">>, [{<<"data">>, [{<<"number">>,[{<<"@id">>,<<"333">>},{<<"#text">>,<<"test message">>}]}, {<<"data">>,<<"current date">>}]}, {<<"mass">>, [{<<"client">>,<<"35">>}, {<<"address">>,<<"lattitude">>}, {<<"code">>,<<"3454343">>}, {<<"foo">>,[{<<"@tipo">>,<<"casa">>},{<<"#text">>,<<"Some text message 2">>}]}, {<<"product">>,<<"TEST">>}]}]}]
[{,[{,[{,[{,[{,},{,}]},{,[{,},{,},{,},{,[{,},{,},},{,},},{,}]}]
像这样的

[list_to_binary(X) || X <- ["1","2","3"]].
[列出二进制(X)| | X使用:

-模块(测试)。
-编译(全部导出)。
to_binary({Term1,Term2})->
{to_binary(Term1),to_binary(Term2)};
to_binary([{u Term1,_Term2}}|u Objs]=术语)->
[to_二进制(术语)| |术语
erlang:列表到二进制(术语);
当erlang:is_number(Term)->
学期
到_二进制(真)->
符合事实的
至_二进制(假)->
错误的
当erlang:is_atom(Term)->
erlang:list_to_binary(erlang:atom_to_list(Term));
to_二进制(术语)->
学期
我使用您的输入运行上述函数:

p@Jahanbakhsh ~/Projects/Test $ erl
Erlang/OTP 19 [erts-8.2.2] [source-1ca84a4] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.2.2  (abort with ^G)
1> c(test).
{ok,test}

2> Input = [{"start", [{"data", [{"number",[{"@id","333"},{"#text","test message"}]}, {"data","current date"}]}, {"mass", [{"client","35"}, {"address","lattitude"}, {"code","3454343"}, {"foo",[{"@tipo","casa"},{"#text","Some text message 2"}]}, {"product","TEST"}]}]}].
[{"start",
  [{"data",
    [{"number",[{"@id","333"},{"#text","test message"}]},
     {"data","current date"}]},
   {"mass",
    [{"client","35"},
     {"address","lattitude"},
     {"code","3454343"},
     {"foo",[{"@tipo","casa"},{"#text","Some text message 2"}]},
     {"product","TEST"}]}]}]

3> test:to_binary(Input).
[{<<"start">>,
  [{<<"data">>,
    [{<<"number">>,
      [{<<"@id">>,<<"333">>},{<<"#text">>,<<"test message">>}]},
     {<<"data">>,<<"current date">>}]},
   {<<"mass">>,
    [{<<"client">>,<<"35">>},
     {<<"address">>,<<"lattitude">>},
     {<<"code">>,<<"3454343">>},
     {<<"foo">>,
      [{<<"@tipo">>,<<"casa">>},
       {<<"#text">>,<<"Some text message 2">>}]},
     {<<"product">>,<<"TEST">>}]}]}]
4> 
p@Jahanbakhsh~/Projects/Test$erl
Erlang/OTP 19[erts-8.2.2][source-1ca84a4][64位][smp:8:8][async threads:10][hipe][kernel poll:false]
Eshell V8.2.2(使用^G中止)
1> c(测试)。
{好的,测试}
2> 输入=[{“开始”、[{“数据”、[{“数字”、[{“@id”、“333”}、{“{text”、“测试消息”}、{“数据”、“当前日期”}、{“质量”、[{“客户机”、“35”}、{“地址”、“晶格”}、{“代码”、“3454343”}、{“foo”、[{“@tipo”、“测试消息”}、{“}、{”}、{“文本”、“一些文本消息2}、{“产品”、“测试”}]。
[{“开始”,
[{“数据”,
[{“number”、[{“@id”、“333”}、{“#text”、“testmessage”}],
{“数据”,“当前日期”}]},
{“弥撒”,
[{“客户”,“35”},
{“地址”,“格子”},
{“代码”,“3454343”},
{“foo”,“tipo”,“casa”},{“text”,“Some text message 2”},
{“产品”、“测试”}]}]
3> 测试:到二进制(输入)。
[{,
[{,
[{,
[{,},{,}]},
{,}]},
{,
[{,},
{,},
{,},
{,
[{,},
{,}]},
{,}]}]}]
4> 
使用:

-模块(测试)。
-编译(全部导出)。
to_binary({Term1,Term2})->
{to_binary(Term1),to_binary(Term2)};
to_binary([{u Term1,_Term2}}|u Objs]=术语)->
[to_二进制(术语)| |术语
erlang:列表到二进制(术语);
当erlang:is_number(Term)->
学期
到_二进制(真)->
符合事实的
至_二进制(假)->
错误的
当erlang:is_atom(Term)->
erlang:list_to_binary(erlang:atom_to_list(Term));
to_二进制(术语)->
学期
我使用您的输入运行上述函数:

p@Jahanbakhsh ~/Projects/Test $ erl
Erlang/OTP 19 [erts-8.2.2] [source-1ca84a4] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.2.2  (abort with ^G)
1> c(test).
{ok,test}

2> Input = [{"start", [{"data", [{"number",[{"@id","333"},{"#text","test message"}]}, {"data","current date"}]}, {"mass", [{"client","35"}, {"address","lattitude"}, {"code","3454343"}, {"foo",[{"@tipo","casa"},{"#text","Some text message 2"}]}, {"product","TEST"}]}]}].
[{"start",
  [{"data",
    [{"number",[{"@id","333"},{"#text","test message"}]},
     {"data","current date"}]},
   {"mass",
    [{"client","35"},
     {"address","lattitude"},
     {"code","3454343"},
     {"foo",[{"@tipo","casa"},{"#text","Some text message 2"}]},
     {"product","TEST"}]}]}]

3> test:to_binary(Input).
[{<<"start">>,
  [{<<"data">>,
    [{<<"number">>,
      [{<<"@id">>,<<"333">>},{<<"#text">>,<<"test message">>}]},
     {<<"data">>,<<"current date">>}]},
   {<<"mass">>,
    [{<<"client">>,<<"35">>},
     {<<"address">>,<<"lattitude">>},
     {<<"code">>,<<"3454343">>},
     {<<"foo">>,
      [{<<"@tipo">>,<<"casa">>},
       {<<"#text">>,<<"Some text message 2">>}]},
     {<<"product">>,<<"TEST">>}]}]}]
4> 
p@Jahanbakhsh~/Projects/Test$erl
Erlang/OTP 19[erts-8.2.2][source-1ca84a4][64位][smp:8:8][async threads:10][hipe][kernel poll:false]
Eshell V8.2.2(使用^G中止)
1> c(测试)。
{好的,测试}
2> 输入=[{“开始”、[{“数据”、[{“数字”、[{“@id”、“333”}、{“{text”、“测试消息”}、{“数据”、“当前日期”}、{“质量”、[{“客户机”、“35”}、{“地址”、“晶格”}、{“代码”、“3454343”}、{“foo”、[{“@tipo”、“测试消息”}、{“}、{”}、{“文本”、“一些文本消息2}、{“产品”、“测试”}]。
[{“开始”,
[{“数据”,
[{“number”、[{“@id”、“333”}、{“#text”、“testmessage”}],
{“数据”,“当前日期”}]},
{“弥撒”,
[{“客户”,“35”},
{“地址”,“格子”},
{“代码”,“3454343”},
{“foo”,“tipo”,“casa”},{“text”,“Some text message 2”},
{“产品”、“测试”}]}]
3> 测试:到二进制(输入)。
[{,
[{,
[{,
[{,},{,}]},
{,}]},
{,
[{,},
{,},
{,},
{,
[{,},
{,}]},
{,}]}]}]
4> 

您的输入数据是固定在同一个3元素元组(id、created和article)上的吗?还是会有所不同?@Asierazkunaga nope。理论上,它可以是不同的大小,但应该是{key、val}结构,以便我可以通过jsx将其转换为json(例如),您的输入数据是固定在同一个3元素元组(id、created和article)上的吗?或者可能会有所不同?@AsierAzkuenaga nope。理论上,它可以是不同的大小,但应该是{key,val}结构,这样我就可以通过jsx将其转换为json(例如)这是巨大的。谢谢你,这就是我需要的。当我积累道具列表时,也将有趣的列表添加到二进制中。再次感谢你。当我发布问题时,你总是帮助我。这是巨大的。谢谢你,这是我需要的。当我积累道具列表时,也将有趣的列表添加到二进制中。再次感谢你。当我发布问题时,你总是帮助我