使用JavaScript解析JSON

3
也许有人可以帮助我朝着正确的方向迈进吗? 非常感谢任何提示。
 var credentials = { steam: {}, rpc: {} };
 var rawCredentials = JSON.parse(fs.readFileSync("auth.json", { "encoding": "utf8" }));
 credentials.steam.accountName = rawCredentials.steam.accountName;
 credentials.steam.password = rawCredentials.steam.password;
 credentials.steam.shaSentryfile = new Buffer(rawCredentials.steam.shaSentryfile, "hex");
 credentials.rpc.username = rawCredentials.rpc.username;
 credentials.rpc.password = rawCredentials.rpc.password;

auth.json文件

 {
 "credentials.steam.accountName": "XXX",
 "credentials.steam.password": "XXX",
 }

无法读取未定义的属性'accountName'

3个回答

6
您的属性关键字实际上是 "credentials.steam.accountName"。您不能使用点记法遍历对象“credentials”或“steam”,因为它们不是对象。要访问值,请使用:rawCredentials['credentials.steam.accountName']
编辑:如果您想使用rawCredentials.credentials.steam.accountName,您的JSON必须如下所示:
rawCredentials = {
  credentials: {
    steam: {accountName: 'foo', ...}
  }
}

1
设计良好的 JSON 文档具有与 JavaScript 兼容的键,以避免出现这种混乱。 - tadman

3

在你的JSON文件中,这些是包含点号的完整属性名,而不是实际嵌套的对象。

另外,你忘记了.credentials部分。相反,使用括号表示法

credentials.steam.accountName = rawCredentials["credentials.steam.accountName"];
credentials.steam.password = rawCredentials["credentials.steam.password"];

(或重构你的JSON)

1

我不知道是否会是问题的原因,但你的auth.json文件存在语法错误:

{
  "credentials.steam.accountName": "XXX",
  "credentials.steam.password": "XXX"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接