元组的Erlang列表jsx:encode错误

元组的Erlang列表jsx:encode错误,erlang,encode,jsx,Erlang,Encode,Jsx,我想用jsx:encode创建一个json格式的元组列表,返回错误: io:format("Mylist After reverse ==========: ~n~p~n",[Mylist]), FinalReading = lists:map( fun(X) -> jsx:encode([X]) end, Mylist), 我的列表打印如下: [{{<

我想用jsx:encode创建一个json格式的元组列表,返回错误:

    io:format("Mylist After reverse ==========: ~n~p~n",[Mylist]),

    FinalReading = lists:map(
                fun(X) ->
                    jsx:encode([X])
                end, Mylist),
我的列表打印如下:

    [{{<<"name">>,<<"Batman">>},{<<"steps">>,1033},{<<"distance">>,830}},
     {{<<"name">>,<<"Superman">>},{<<"steps">>,641},{<<"distance">>,520}}]
[{,},{,1033},{,830},
{{,},{,641},{,520}}]
我得到了这个错误:

    09:49:24.048 [error] ** Boss Service Handler myproj_priv_mylib_websocket terminating in handle_incoming/4
    for the reason error:badarg
    ServiceUrl: "/websocket/mylib"
    WebSocketId: <0.336.0>
    SessionId  : <<"a4f60118091309990af7c89c9a1acb49ee3bb08d">>
    Message    : <<"admin@mydomain.com:z3CMLU9jDTYdiAacNiJrMIkdp4lTf6sb">>
    State    : []
    ** Stacktrace: [{jsx_parser,value,4,[{file,"src/jsx_parser.erl"},{line,125}]},{lists,map,2,[{file,"lists.erl"},{line,1237}]},{myproj_priv_mylib_websocket,handle_incoming,5,[{file,"..."},{line,130}]},{boss_service_worker,handle_cast,2,[{file,"src/boss/boss_service_worker.erl"},{line,173}]},{gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,599}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,239}]}]
09:49:24.048[错误]**Boss服务处理程序myproj_priv_mylib_websocket在句柄中终止\u传入/4
原因错误:badarg
ServiceUrl:“/websocket/mylib”
WebSocketId:
会话ID:
信息:
国家:[]
**5.线路,125}}}},{线路,130}},{线路,130}},{线路,130}},{线路,130},{线路,线路,地图,2,{{文件,文件,地图,2,{文件,文件,文件,地图,地图,2,{文件,文件,文件,地图,2,{文件,文件,文件,文件,文件,文件,清单........网页,地图,2,,{5,2,{2,{2,{2,{5,{5,{5,{5,{5,{5,{5,{5,{5,{5,{5,{5,{5,{5,{5,{5,{文件,{文件,{文件,{文件,{文件,{文件,{文件,{文件,{文件,{文件,{“gen_server.erl”},{line,599}]},{proc_lib,init_p_do_apply,3,[{file,“proc_lib.erl”},{line,239}]}]
如果有人指出正确的代码就好了。
提前感谢大家。

您必须使用
erlang:tuple\u to\u list/1
list:map/2
将顶级元组转换为列表,以便
jsx
能够正确地将它们编码为JSON数组

1> List = [{{<<"name">>,<<"Batman">>},{<<"steps">>,1033},{<<"distance">>,830}},
1>         {{<<"name">>,<<"Superman">>},{<<"steps">>,641},{<<"distance">>,520}}].
[{{<<"name">>,<<"Batman">>},
  {<<"steps">>,1033},
  {<<"distance">>,830}},
 {{<<"name">>,<<"Superman">>},
  {<<"steps">>,641},
  {<<"distance">>,520}}]
2> List2 = lists:map(fun erlang:tuple_to_list/1, List).
[[{<<"name">>,<<"Batman">>},
  {<<"steps">>,1033},
  {<<"distance">>,830}],
 [{<<"name">>,<<"Superman">>},
  {<<"steps">>,641},
  {<<"distance">>,520}]]
3> io:format("~s~n", [jsx:encode(List2)]).
[{"name":"Batman","steps":1033,"distance":830},{"name":"Superman","steps":641,"distance":520}]
1>List=[{{,},{,1033},{,830},
1>         {{,},{,641},{,520}}].
[{{,},
{,1033},
{,830}},
{{,},
{,641},
{,520}}]
2> List2=lists:map(有趣的erlang:tuple\u to\u list/1,list)。
[[{,},
{,1033},
{,830}],
[{,},
{,641},
{,520}]]
3> io:format(“~s~n”,[jsx:encode(List2)])。
[{“名字”:“蝙蝠侠”,“舞步”:1033,“距离”:830},{“名字”:“超人”,“舞步”:641,“距离”:520}]

我是Erlang的新手,所以不确定我是否有权做出判断,但我觉得最好在jsx:encode中隐藏将元组转换为列表的需要

如果

我相信这同样适用于这种语法

{{a,<<"a">>}, {b,<<"b">>}}.
{{a,},{b,}。
最后一个语法提供了更多信息(它反映了一种顺序,我可以在代码中依靠这种顺序进行模式匹配)

我通常尝试将我的JSON转换成一个元组,我知道它的顺序,这样我就可以使用模式匹配而不是使用keyfind和friends。但是因为上面的语法不起作用,我必须包装
jsx:encode(tuple\u to\u list())
来自动管理“proptuple”


我完全误解了吗?有没有更合适的方法在Erlang中表示/处理/操作JSON?

非常感谢!工作得很有魅力。
{
  "a" : "a",
  "b" : "b"
}
{{a,<<"a">>}, {b,<<"b">>}}.