使用JSON.parse解析后无法通过键访问JSON值的问题求助
问题原因及解决办法
核心问题
你用错了fs.readFileSync的用法——这个是同步读取文件的方法,根本不支持传入回调函数。当前代码里,json变量实际是readFileSync直接返回的文件原始字符串,你写的回调函数完全没被执行,JSON.parse根本没生效。所以第一个console.log打印的是字符串,字符串自然没有id这类属性,后续访问就会输出undefined。
修正方案
方案一:同步读取的正确写法
直接读取字符串后手动解析,不需要回调:
let json module.exports.checkLoggedIn = () => { // 同步操作不需要async try { // 同步读取文件内容 const fileContent = fs.readFileSync(configPath, "utf-8"); // 手动解析JSON字符串为对象 json = JSON.parse(fileContent); console.log(json); console.log(json.id); console.log(json["id"]); // 简化布尔值判断 return json.loggedIn === true; } catch (err) { throw err; // 捕获读取或解析错误 } }
方案二:异步读取的正确写法(推荐异步风格)
如果想用异步逻辑,改用fs.promises.readFile配合await:
let json module.exports.checkLoggedIn = async () => { try { // 异步读取文件并等待结果 const fileContent = await fs.promises.readFile(configPath, "utf-8"); json = JSON.parse(fileContent); console.log(json); console.log(json.id); console.log(json["id"]); return json.loggedIn === true; } catch (err) { throw err; } }
内容的提问来源于stack exchange,提问作者ko100
相关产品推荐
相关产品推荐

