在Erlang中使用Jiffy解码JSON属性名以列出字符串而不是二进制字符串

在Erlang中使用Jiffy解码JSON属性名以列出字符串而不是二进制字符串,json,erlang,jiffy,Json,Erlang,Jiffy,我有一个使用库生成的元组 例如:jiffy:decode() {[{,}]} 我希望成为“foo” 有没有办法将转换为“foo” 基本上,我想将其转换为: [{,},{,}] 为此: 注:考虑这是一个非常大的列表,我想要一个有效的解决方案。 有一个函数可以将二进制转换为列表“hello”: 1>二进制到二进制列表()。 “你好” 2> L=[{,},{,}]。 [{,}, {,}] 您可以使用列表理解将其应用于您的列表: 3> [{binary_to_list(X),Y} || {X,

我有一个使用库生成的元组

例如:
jiffy:decode()
{[{,}]}

我希望
成为
“foo”

有没有办法将
转换为
“foo”

基本上,我想将其转换为:

[{,},{,}]

为此:


注:考虑这是一个非常大的列表,我想要一个有效的解决方案。 有一个函数可以将二进制
转换为列表
“hello”

1>二进制到二进制列表()。
“你好”
2> L=[{,},{,}]。
[{,},
{,}]
您可以使用列表理解将其应用于您的列表:

3> [{binary_to_list(X),Y} || {X,Y} <- L].
[{"t",<<"getWebPagePreview">>},{"message",<<"google.com">>}]
4>
3>[{binary_to_list(X,Y}}{X,Y}
您可以将其嵌入到函数中:

convert(List) ->
    F = fun({X,Y}) -> {binary_to_list(X),Y} end,
    [F(Tuple) || Tuple <- List].
转换(列表)->
F=fun({X,Y})->{binary_to_list(X,Y}end,
[F(Tuple)| | Tuple因为(当)元素的顺序无关紧要,最有效的版本是

convert({List}) ->
    {convert(List, [])}.

convert([], Acc) -> Acc;
convert([{X, Y}|T], Acc) ->
    convert(T, [{binary_to_list(X), Y}|Acc]).
当您希望保留元素的顺序时,请使用列表理解将strightforward版本保留下来

convert({List}) ->
    {[{binary_to_list(X), Y} || {X, Y} <- List]}.

这是我们能做到这一点的最好方法吗?因为字符串非常大,我关心的是效率。有没有其他方法,比如将c语言与Erlang结合使用?或者其他任何方法?这是最好的方法吗?我关心解决方案的效率,因为字符串非常大。例如,您可以对不同的解决方案进行基准测试ns:
计时器:tc(模块名称,转换方法,[List])
。但您不会找到更快的解决方案。
convert({List}) ->
    {[{binary_to_list(X), Y} || {X, Y} <- List]}.
convert({List}) ->
    {convert_(List)}.

convert_([]) -> [];
convert_([{X, Y}|T]) ->
    [{binary_to_list(X), Y}|convert_(T)].