我有一些从目录中获取文件列表的代码,我希望将其作为json发送回客户端。
getDir('GET', [])->
{ok,Sheets} = files(FileDir),
Sheets2 = sheetJson(Sheets, ""),
{json, [{sheets, Sheets2}]}.
sheetJson([H|T], [])->
{File, Name, Size} = H,
Str = [{file, File},{name, Name}],
sheetJson(T, Str);
sheetJson([H|T], Str)->
{File, Name, Size} = H,
Acc = Str++[{file, File},{name, Name}],
sheetJson(T, Acc);
sheetJson(_, Str)->Str.此代码将返回
{"sheets":{"file":"0-Jason .csv","name":"Jason ","file":"1-State.csv","name":"State","file":"2-country.csv","name":"country"}}但想要的更像是
{"sheets":{"file":"0-Jason .csv","name":"Jason "},{"file":"1-State.csv","name":"State"},{"file":"2-country.csv","name":"country"}}如果我尝试将代码更改为任何内容,那么我就会得到以下错误消息
Unhandled Error: error:function_clause. Stacktrace: [{boss_json,json_data1,[[{sheet,{file,"0-Sheet1.csv"},{name,"Sheet1"}}],[],[]],[{file,"src/boss/boss_json.erl"},{line,31}]},{boss_json,json_data1,3,[{file,"src/boss/boss_json.erl"},{line,42}]},{boss_json,encode,2,[{file,"src/boss/boss_json.erl"},{line,16}]},{boss_web_controller_render,process_action_result,4,[{file,"src/boss/boss_web_controller_render.erl"},{line,171}]},{boss_web_controller,execute_action_inner,9,[{file,"src/boss/boss_web_controller.erl"},{line,337}]},{boss_web_controller_handle_request,process_dynamic_request,4,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,242}]},{boss_web_controller_handle_request,process_request,4,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,228}]},{boss_web_controller_handle_request,set_timer,7,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,148}]}]编辑:我想出了的解决方案
我只是编写了一个json字符串,使用了{output,}而不是{ Json,_},好处是我可以在javascript错误和补丁中看到Json字符串,在那里,与erlang一样,我只得到一条没有告诉我任何信息的大量消息。
发布于 2014-07-18 05:21:49
您试图生成的以下JSON实际上是无效的:
{"sheets":{"file":"0-Jason .csv","name":"Jason "},{"file":"1-State.csv","name":"State"},{"file":"2-country.csv","name":"country"}}相反,您可能希望按以下方式进行编码:
{"sheets":[{"file":"0-Jason .csv","name":"Jason "},{"file":"1-State.csv","name":"State"},{"file":"2-country.csv","name":"country"}]}这仅仅是通过创建一个表单列表来实现的。基本上,函数getDir/2应该返回以下值:
{json, [{sheets, [
[{file, "0-Jason .csv"}, {"name", "Jason "}],
[{file, "1-State.csv"}, {"name", "State"}],
[{file, "1-country.csv"}, {"name", "country"}]
]}]}.您可能只需要更改两行:
sheetJson([H|T], [])->
{File, Name, Size} = H,
Str = [[{file, File},{name, Name}]], %%% <-- here
sheetJson(T, Str);
sheetJson([H|T], Str)->
{File, Name, Size} = H,
Acc = Str++[[{file, File},{name, Name}]], %%% <-- here
sheetJson(T, Acc);https://stackoverflow.com/questions/24815317
复制相似问题