Javascript 在node/express中返回字符串而不是数组的JSON解析文件

Javascript 在node/express中返回字符串而不是数组的JSON解析文件,javascript,arrays,json,node.js,express,Javascript,Arrays,Json,Node.js,Express,我在尝试从JSON文件解析空(字符串化)数组时遇到问题,我得到的不是一个空数组,而是一个字符串 我的JSON文件初始设置为: "[]" 我使用文件系统将解析后的数据分配给变量 let parsedObjs = JSON.parse(fs.readFileSync(__dirname + '/data/employees.json')); 当我在浏览器控制台中尝试此操作时,会得到一个空数组,正如我所期望的: JSON.parse("[]") > [] 但是,在Node/Express中

我在尝试从JSON文件解析空(字符串化)数组时遇到问题,我得到的不是一个空数组,而是一个字符串

我的JSON文件初始设置为:

"[]"
我使用文件系统将解析后的数据分配给变量

let parsedObjs = JSON.parse(fs.readFileSync(__dirname + '/data/employees.json'));
当我在浏览器控制台中尝试此操作时,会得到一个空数组,正如我所期望的:

JSON.parse("[]")
> []
但是,在Node/Express中,我得到一个返回的字符串:

console.log(type of:', typeof parsedObjs);
> type of: string
奇怪的是,如果我将初始文件设置为非结构化数组,它将返回一个数组:

> []
但当然,这会产生一个“意外的JSON结尾”错误

我是个新手,请告诉我我做错了什么。多谢各位

额外信息

整体功能:

function populateSelectors(selector) {
  let foundOptions = [];
  let parsedObjs = JSON.parse(fs.readFileSync('./data/employees.json'));

  parsedObjs.forEach(obj => {
      let key = Object.keys(obj)[0];
      let optionName = obj[key][selector];
      if (foundOptions.indexOf(optionName) === -1 ) {
          foundOptions.push(optionName);
      }
  });
  return foundOptions;
}
完整错误(我显然已将完整路径更改为):

SyntaxError:JSON输入意外结束
application.js:630
在JSON.parse()处
在Object.populateSelectors(\Rota Application 2\staff.js:14:27)
在\Rota Application 2\app.js:45:28
在Layer.handle[作为handle\u请求](\Rota应用程序2\node\u modules\express\lib\router\Layer.js:95:5)
下一步(\Rota应用程序2\node\u modules\express\lib\router\route.js:137:13)
在Route.dispatch(\Rota Application 2\node\u modules\express\lib\router\Route.js:112:3)
在Layer.handle[作为handle\u请求](\Rota应用程序2\node\u modules\express\lib\router\Layer.js:95:5)

在\Rota Application 2\node\u modules\express\lib\router\index.js:281:22,根据最佳猜测发生了什么:

如果将空数组存储为文件中的
“[]”
,则在节点JS中读取时,解析看到的字符串将如下所示:
“\”[]\”

因此,就解析器而言,它正在解析一个字符串并返回该字符串。(比如做
JSON.parse('\“[]\”);


readFile
读取的任何文件都将是字符串。因此,将空数组保留为
[]
就足够了,JSON文件中没有引号

这很正常,文件格式不正确,必须删除引号

[]


JSON.parse(“[]”)使用引号,因为必须将字符串传递给parse函数。

我遇到了同样的问题,然后我意识到了错误。我将字符串
“[]”
改为对象
[]


我明白了,谢谢。如何在避免产生JSON错误(“JSON输入意外结束”)的同时做到这一点?我不知道为什么会发生这种情况。我尝试了一个快速PoC,文件中只有
[]
。我试着像这样解析它:
var x=JSON.parse(fs.readFileSync('./t.JSON'))
,它按照预期工作。你能分享你的电话和完整的错误吗?我在问题中看到了其中的一些错误,但它令人困惑,因为存在语法错误,如:
console.log(type of:',typeof parsedObjs)
您可以尝试的另一个选项是该包,它围绕本机
fs
模块提供了一个包装器,包括方便的方法,如
readJsonSync
我的帖子写得有点混乱,“console.log(type of:',typeof parsedObjs);”不是一个错误,我只是在演示代码行和下面的结果。我已经添加了您要求的其他信息。我将同时尝试节点fs extra。我刚刚尝试了fs extra,奇怪的是我得到了相同的错误。我明白了,谢谢。如何在避免产生JSON错误(“JSON输入意外结束”)的同时做到这一点?