2011-11-12 20 views
0

JSONファイルの読み取りと解析を行うかなり簡単なスクリプトがあります。 JSONは非常にシンプルで、私はそれが有効であると確信しています。今非同期および同期読み取りとは異なる結果

{ 
    "foo": "bar" 
} 

、私はfs.readFileでそれを読んしようとしています。読み込み時にエラーは発生せず、返されるデータは文字列です。唯一の問題は、文字列が空であることです。

私はコードを繰り返しましたが、fs.readFileSyncを使用しました。これは、同じパスを使用してファイルを完全に返しました。どちらもutf-8エンコーディングが指定されています。

ご覧のとおり、非常にシンプルなコードです。

fs.readFile('./some/path/file.json', 'utf8', function(err, data) { 
    if(!err) { 
     console.log(data); // Empty string... 
    } 
}); 

console.log(fs.readFileSync('./some/path/file.json', 'utf8')); // Displays JSON file 

権限または所有権はありますか。私は755777の許可セットを無駄にしようとしました。

私はノードv0.4.10を実行しています。正しい方向に私を指すための提案は、非常に高く評価されます。ありがとう。

編集:ここに私の実際のコードのブロックがあります。うまくいけば、これはあなたに良いアイデアを与えるでしょう。

// Make sure the file is okay 
fs.stat(file, function(err, stats) { 
    if(!err && stats.isFile()) { 
     // It is okay. Now load the file 
     fs.readFile(file, 'utf-8', function(readErr, data) { 
      if(!readErr && data) { 
       // File loaded! 
       // Now attempt to parse the config 
       try { 
        parsedConfig = JSON.parse(data); 
        self.mergeConfig(parsedConfig); 

        // The config was loaded and merged 
        // We can now call the callback 
        // Pass the error as null 
        callback.call(self, null); 

        // Share the news about the new config 
        self.emit('configLoaded', file, parsedConfig, data); 
       } 
       catch(e) { 
        callback.call(self, new Error(file + ': The config file is not valid JSON.')); 
       } 
      } 
      else { 
       callback.call(self, new Error(file + ': The config file could not be read.')); 
      } 
     }); 
    } 
    else { 
     callback.call(self, new Error(file + ': The config file does not exist.')); 
    } 
}); 
+1

コード内にutf8が見えません。それは実際のコードですか? – thejh

+0

申し訳ありませんが、私はちょうどコピーを入力した、私はUTF-8を追加します。 – Olical

+0

@thejs私は実際のコードのブロックを追加しました。 'file'変数が文字列であり、正しいファイルに行くことを保証できます。 – Olical

答えて

1

これはかなり変です。

コードが見えます。

var fs = require('fs'); 

fs.readFile('./jsonfile', 'utf8', function(err, data) { 
     if(err) { 
       console.error(err); 
     } else { 
       console.log(data); 
       parsedConfig = JSON.parse(data); 
       console.log(parsedConfig); 
       console.log(parsedConfig.foo); 
     } 
}); 

JSONファイル:

{ 
     "foo": "bar" 
} 

出力:

$ node test_node3.js 
{ 
     "foo": "bar" 
} 

{ foo: 'bar' } 
bar 

これは、ノード0.4.10であるが、私はそれがすべてのノードのバージョンで動作するはずですかなり確信しています。

なぜあなたのデータは空ですか?この場合は私のようなエラーをチェックし、もしあれば出力をポストするべきです。エラーがなければ、githubにbugと記入してください。

+0

エラーには何もありません。それは働いていると思うが、データは返されない。たぶん私はバグを報告する必要がありますが、私はどのように問題を再現するのか分かりません。私は本当に素晴らしいことは何もしていない、それはマックのものかもしれない? – Olical

+0

再作成できない場合、バグを埋めることはできません。それはマック関連かもしれません。 – malletjo

関連する問題