在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)].