Search code examples
stringerlangtuplesejabberd

Converting string to tuple in Erlang


How to convert string to tuple in Erlang?

A = "{"hi","how"}"

And I want it to converted into

B = {"hi","how"}.

When I call function list_to_tuple(A) it gives output:

{123,60,60,34,106,105,100,34,62,62,44,34,104,105,34,125}

rather than {"hi","how"}.


Solution

  • You should use erl_scan module to tokenize the string and erl_parse to convert the tokens to a erlang term.

    % Note the '.' at the end of the expression inside string.
    % The string has to be a valid expression terminated by a '.'.
    1> Str = "{\"x\",\"y\"}.".  
    "{\"x\",\"y\"}."
    2> {ok, Ts, _} = erl_scan:string(Str).
    {ok,[{'{',1},
         {string,1,"x"},
         {',',1},
         {string,1,"y"},
         {'}',1},
         {dot,1}],
        1}
    3> {ok, Tup} = erl_parse:parse_term(Ts).
    {ok,{"x","y"}}
    4> Tup.
    {"x","y"}