2

私は完全なプログラミングと JavaScript の初心者であり、その事実が私の問題の原因であることを認めて、これを前置きさせてください。

json.stringify で保存したテキスト ファイルから大量のカスタム オブジェクトの配列を取り込もうとしています。ファイルの内容と json.parse(them) を取得すると、次のエラーが発生します。

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 でハンプティ ダンプティを元に戻すことができない理由がわかりません。どんな助けでも大歓迎です。

編集: text.replace 行は、私のコードではなく、/vendor/commonjs-utils/lib/json-ext.js にあります。これはJSONの一部だと思いました。おそらく私は間違っていますか?JSON を介してオブジェクト配列を解析する別の方法はありますか?

4

1 に答える 1

5

fs.readFileファイル名とコールバックのみを渡す場合、2つまたは3つの引数を取り、コールバック関数は次の2つの引数を取得します。(err, data)ここdataで、はrawバッファです。

したがって、それを行う正しい方法は次のようになります。

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

data.toStringエンコーディングを最初の引数として取ります。

別の方法として、の2番目の引数としてエンコーディングを指定fs.readFileし、コールバックに文字列を渡すことができます。

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

Node APIドキュメントはあなたの親友です!

于 2011-05-05T17:39:12.273 に答える