You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:50:05