Ich verwende ein einfaches Node.js, um Informationen aus einer gültigen JSON-Datei abzurufen (überprüft mit JSLint), aber der Code, den ich verwende, gibt nicht den erwarteten Wert zurück:
squadJSON = JSON.parse(fs.readFileSync('./squads/squad' + whichSquad + '.json'));
und es kommt zurück:
{ type: 'Buffer', data:
[ 123,
10,
32,
32,
34,
97,
99,
... 548 more items ] }
Gibt es einen Grund, warum das passiert?
fs.readFileSync()
gibt einen Puffer zurück, wenn Sie keine Kodierung angeben.
https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options
Also erzähl fs.readFileSync()
Welche Codierung soll verwendet werden:
squadJSON = JSON.parse(fs.readFileSync('./squads/squad' + whichSquad + '.json', 'utf8'));
Das „Warum“ wurde von Sidney beantwortet, aber ein besseres „Was ist zu tun“ wäre zu verwenden require()
was unterstützt Parsen gültiger JSON-Dateien synchron und Rückgabe des Ergebnisses als Objekt:
squadJSON = require('./squads/squad' + whichSquad + '.json');
oder noch schöner, mit einem ES6 Vorlagenliteral:
squadJSON = require(`./squads/squad${whichSquad}.json`);
Ein bemerkenswerter Unterschied bei der Verwendung require()
ist, dass es relative Pfade auflöst __dirname
das ist der Verzeichnispfad des aktuellen Moduls, wohingegen fs
Methoden lösen relative Pfade auf verwenden process.cwd()
oder „aktuelles Arbeitsverzeichnis“. Es ist das Verzeichnis innerhalb einer Shell-Sitzung, von dem aus das Hauptmodul des Programms vom Knoten ausgeführt wird.
Hoffentlich zeigen die folgenden Beispiele, wie sich ihre relative Pfadauflösung unterscheidet:
Zu machen require(...)
Benehmen wie JSON.parse(fs.readFileSync(..., 'utf8'))
:
const { resolve } = require('path');
function readFileSyncJson (path) {
return require(resolve(process.cwd(), path));
}
Und zu machen JSON.parse(fs.readFileSync(..., 'utf8'))
Benehmen wie require(...)
:
const { resolve } = require('path');
function requireJson (path) {
return JSON.parse(fs.readFileSync(resolve(__dirname, path), 'utf8'));
}
Was ist der erwartete Wert?
– Spencer Wieczorek
16. Februar 2018 um 0:28
NEIN.
JSON.parse
gibt niemals einen Puffer zurück.– Bergi
16. Februar 2018 um 0:52