Я получаю странную неожиданную ошибку токена, пытаясь разобрать файл JSON с помощью узла. Я тестировал код с двумя файлами, которые выглядят одинаково. Я использовал инструмент сравнения кода для сравнения, и они выглядят одинаково. Однако, когда я пытаюсь их проанализировать, получается ошибка, а другая - нет. Файл, который не работает, генерируется из сценария PowerShell. Созданный вручную был создан. Я сбит с толку. Одна вещь, которую я заметил, отличается от них, когда я пишу json на консоль, тот, который не работает, имеет? в начале.Json Parse Неожиданный токен с узлом
JSON из файла, который не работает:
данных = { "stack_name": "парфюм-а", "параметры": { "StackSet": "б", "MonitoringEnableAutoscalingAlarm": " True »,« MachineConfigEnvironment »:« Perf »,« AppEnvironmentType »:« perf »,« StackInRotation »:« True »,« MonitoringEnableNotificationOnlyAlarms »:« False »,« AMIImage »:« ami-123456789 »},« теги »: { "CostCenter": "12345", "Владелец": "[email protected]"}, "cft_file": "ПФТ/cft.json"}
JSON из файла, который делает работу:
data = {"stack_name": "perf-a", "parameters": {"StackSet": "a", "MonitoringEnableAutoscalingAlarm": "True", "MachineConfigEnvironment": "Perf", "AppEnvironmentType": "perf" , «StackInRotation»: «True», «MonitoringEnableNotificationOnlyAlarms»: «False», «AMIImage»: «ami-123456789»}, «теги»: {«CostCenter»: «45229», «Владелец»: «test @ test. ком»}, "cft_file": " ПФТ/cft.json"}
код я использую для тестирования:
var envFile = "perf2.json";
var fs = require('fs');
console.log('envFile = ' + envFile);
fs.readFile(envFile, 'utf8', function (err, data) {
if (err) {
console.log('error reading variables file');
throw err;
}
try {
var JsonData = JSON.stringify(data);
console.log('JsonData = ' + JsonData);
data = data.replace(/\\n/g, "\\n")
.replace(/\\'/g, "\\'")
.replace(/\\"/g, '\\"')
.replace(/\\&/g, "\\&")
.replace(/\\r/g, "\\r")
.replace(/\\t/g, "\\t")
.replace(/\\b/g, "\\b")
.replace(/\\f/g, "\\f")
.replace(/\\0/g, "")
.replace(/\\v/g, "")
.replace(/\\e/g, "\\e");
data = data.replace(/[\u0000-\u001F]+/g, "");
console.log('data = ' + data);
var cftVariables = JSON.parse(data);
console.log('cftVariables = ' + cftVariables);
console.log('cftVariables stack name = ' + cftVariables.stack_name);
} catch (e) {
console.log('error parsing variables file');
throw e;
}
});
Как вы можете видеть, я также пытался JSON.stringify но Я теряю свойства, а cftVariables.stack_name становится неопределенным.
Эта проблема преследует меня в течение нескольких дней, и я сейчас не понимаю, как ее исправить.
Для справки, здесь приведен фрагмент PowerShell, который создает файл. Проблема может быть там.
$savePath = "envs/" +$filetouse + ".json"
$parameters = @{AppEnvironmentType =$AppEnvironmentType;
StackSet = $StackSet;
StackInRotation = $StackInRotation;
AMIImage = $amiid;
MonitoringEnableAutoscalingAlarm = $MonitoringEnableAutoscalingAlarm;
MonitoringEnableNotificationOnlyAlarms= $MonitoringEnableNotificationOnlyAlarms;
MachineConfigEnvironment = $MachineConfigEnvironment;
}
$tags = @{Owner = "[email protected]";
CostCenter = "45229";
}
$envcft = @{stack_name =$stack_name;
cft_file = "cft/cft.json";
parameters = $parameters;
tags = $tags;
} | ConvertTo-Json
Write-host("Saving the env file with the new amiId... ")
$envcft | Out-File $savePath -Encoding UTF8 -force
Вы пытались удалить '?' В начале? Это неверно json нормально .... – PaulProgrammer