javascript - JSON解析文件返回字符串而不是节点/快递中的数组
问题描述
尝试从 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: Unexpected end of JSON input
application.js:630
at JSON.parse (<anonymous>)
at Object.populateSelectors (<FULL PATH>\Rota Application 2\staff.js:14:27)
at <FULL PATH>\Rota Application 2\app.js:45:28
at Layer.handle [as handle_request] (<FULL PATH>\Rota Application 2\node_modules\express\lib\router\layer.js:95:5)
at next (<FULL PATH>\Rota Application 2\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (<FULL PATH>\Rota Application 2\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (<FULL PATH>\Rota Application 2\node_modules\express\lib\router\layer.js:95:5)
at <FULL PATH>\Rota Application 2\node_modules\express\lib\router\index.js:281:22
解决了!
问题是我在其他地方有一个 writeFile 方法,他们都试图同时访问该文件。我将其更改为 writeFileSync 并解决了问题!
解决方案
正常,文件格式不对,必须去掉引号。
[]
JSON.parse("[]") 使用引号,因为您必须将字符串传递给 parse 函数。
推荐阅读
- gdb - gdb 是否支持命令行中的注释(gdb 提示符)?
- graphql - Apollo 服务器订阅无法识别 Async Iterable
- javascript - 如何防止子组件重新渲染?
- angular - 为什么 MatDialog 组件中的 Angular Form 非常慢?
- debian - DEBChange (DCH),修复未记录的行为
- php - 网站中断并显示消息“警告:“继续”定位开关等同于“中断”。您的意思是使用“继续 2”吗?
- r - 将变量的特定值从R输出到word文档/ power point
- android - 自定义弹出菜单样式
- python - 在 Python 中调用 Microsoft Access 模块。将多个 Access 表合并为 1 个单表
- xamarin.forms - tesseract 测试 xamarin 错误输出 xamarin 形式