从JSON读取返回undefined

时间:2017-02-28 20:45:23

标签: javascript json node.js

我正在尝试从包含我的错误消息的JSON中读取,以便在我想要更改我的错误消息所说的内容时,我只是更改JSON而不是潜入我的源代码。一切似乎都很好......

var fs = require('fs')

console.log("Now reading from error messages configuration file...");

var errorMsgs = JSON.parse(fs.readFileSync('config/error_msgs.JSON'));
console.log(errorMsgs)

这就是 errorMsgs.json

中的内容
{
  "bad_password" : [
    {
      "error" : "Incorrect login credentials.",
      "details" : "This happens if you either have an incorrect username or password. Please try again with different credentials."
    }
  ],

  "missing_fields" : [
    {
      "error" : "Credentials failed to parse.",
      "details" : "This happens when one or more fields are missing (or have illegal characters in them), please try again with different credentials."
    }
  ]
}

当我登录控制台时,errorMsgs显示正常。当我记录errorMsgs之一的项目(如bad_password)时,它也可以正常工作,因为它会显示嵌套在其中的项目。但是,当我尝试检索像errorMsgs.bad_password['error']这样的特定值时,它会返回undefined。我似乎无法弄明白。我尝试了点符号(errorMsgs.bad_password.error),它返回undefined。我尝试了上面的方法(errorMsgs.bad_password['error']),它也返回undefined。要求typeof errorMsgs,它返回object,我假设它不是字符串。首先将值传递给变量然后记录变量也不会执行任何操作。节点是否在运行中将其转换为字符串,导致它返回未定义,或者我只是做错了什么?

1 个答案:

答案 0 :(得分:3)

bad_password" : [
    {
      "error" : "Incorrect login credentials.",
      "details" : "This happens if you either have an incorrect username or password. Please try again with different credentials."
    }
  ],

您的嵌套对象包含在数组中。

errorMsgs.bad_password[0]['error']

这就是你要找的东西。只需获取数组的第一个值