我试图在lua中读取json文件,下面的代码(测试。但是当我运行这段代码时,我没有得到任何输出,脚本只是挂起。我不明白我错在哪里
json = require("json")
f = io.open(path, "r")
io.input(f)
local content = io.read("*a")
io.close()
config = json.decode(content)
for key, value in pairs(config) do print(key, value) end
注意:-我已经放置了JSON。lua在我创建这个测试的同一个文件夹中。卢阿
1条答案
按热度按时间rjee0c151#
让我们重写你的代码:
从5.4开始,您可以保存
:close()
并将其替换为更健壮的<close>
(如果变量在错误的情况下超出范围,也会被触发):这消除了可能导致挂起的错误(未指定的行为):如果打开文件失败(e.例如,文件未找到或缺少权限),则
io.input(nil)
将是一个no-op,返回当前的标准输入,但不更改它。因此,当尝试使用io.read("*a")
读取所有文件时,您将在stdin上等待文件结束。它还消除了ESkri在评论中指出的第二个错误:调用
io.close()
关闭你的stdout。它不会关闭您的标准输入。文件保持打开状态。要正确地报错,请将对
io.open
的调用 Package 在Assert中。除非有必要,否则篡改全局标准输入或标准输出是非常不好的做法。(Ab)使用stdin和stdout进行文件I/O而不是直接使用文件句柄是一种巨大的代码气味,甚至不更简洁。