我试图加载一个非常大的JSON文件并将其绑定到一个变量,这是我的代码失败.....
deps = File.open("../DepMap.json")
|> IO.read(:all)
|> JSX.decode
我回来了
** (FunctionClauseError) no function clause matching in :io.request/2
(stdlib) io.erl:556: :io.request({:error, :enoent}, {:get_line, :unicode, ""})
(elixir) lib/io.ex:82: IO.do_read_all/2
lib/depchecker.ex:6: (module)
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
我在这里缺少什么?我假设File.open的结果作为第一个争论传递给IO.read(:all),但这是失败的重点,我不知道如何纠正这个问题。
答案 0 :(得分:4)
File.open
会返回{:ok, pid}
或{:error, reason}
。第二个是失败的情况。在这里你得到{:error, :enoent}
意味着文件不存在 - 你可能需要弄清楚你的路径有什么问题。
您可能还想在管道中使用爆炸版File.open
:
deps = File.open!("../DepMap.json")
|> IO.read(:all)
|> JSX.decode
此行为与File.open
类似,但会引发异常而不是返回错误值。成功虽然它只返回代表文件的pid
,这就是IO.read
调用所需的内容。