JSON Ошибка при разборе "... не имеет метода" заменить "" - PullRequest
2 голосов
/ 05 мая 2011

Позвольте мне предвосхитить это признанием того, что я полный программист и javascript noob, и этот факт является источником моей проблемы.

Я пытаюсь заполнить большой массив пользовательских объектов из текстового файла, который я сохранил, с помощью json.stringify. Когда я беру содержимое файла и json.parse (их), я получаю следующую ошибку:

var backSlashRemoved = text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'
                            ^
TypeError: Object (contents of file) has no method 'replace'

Код, который вызывает эту ошибку:

fs.readFile('/savedcustomobjectarray', function (err, data) {
  var customobjectarray = json.parse(data);
});

Полагаю, я ошибаюсь. Я видел, как некоторые люди упоминают сериализаторы для такого рода вещей, но я хотел дважды проверить, действительно ли это то, что мне нужно (и, возможно, получить какое-то указание, как использовать их в этом контексте). Кажется, что вывод stringify хорош, поэтому я не уверен, почему JSON не может просто снова собрать Шалтай-Болтай. Любая помощь будет принята с благодарностью.

EDIT: Строка text.replace находится в /vendor/commonjs-utils/lib/json-ext.js, а не в моем коде. Я предположил, что это было частью JSON. Возможно я не прав? Есть ли другой способ для анализа моего массива объектов через JSON?

1 Ответ

5 голосов
/ 05 мая 2011

fs.readFile принимает 2 или 3 аргумента, при передаче только имени файла и обратного вызова ваша функция обратного вызова получит следующие два аргумента (err, data), где data - это необработанный буфер .

Таким образом, правильный способ сделать это будет:

fs.readFile('/savedcustomobjectarray', function (err, data) {
  var customobjectarray = JSON.parse(data.toString('utf8'));
});

data.toString принимает кодировку в качестве первого аргумента.

Альтернативно, вы можете указать кодировку какВторой аргумент fs.readFile и передача ему функции обратного вызова:

fs.readFile('/savedcustomobjectarray', 'utf8', function (err, data) {
  var customobjectarray = JSON.parse(data);
});

Узел API Документы ваш лучший друг!

...