У меня возникают проблемы при попытке анализа пустого (строкового) массива из файла 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 в другом месте, они оба пытались получить доступ к файлу одновременно. Я изменил это, чтобы написать FileSync, и проблема решена!