2017-12-17 6 views
2

私は2つのノードアプリケーションが関連しています。それらのうちの1つは、子プロセスexecメソッドを使用して別のものから呼び出されます。このアプリケーションでは、このメソッドでJSONファイルをいくつか読んでいます。子プロセスのJSONファイルを読む

function readAsync(files, configs, callBack) { 
var result = []; 
files.forEach(function (item, i) { 
    result = result.concat(JSON.parse(fs.readFileSync(item, { encoding: 'utf8' }))); 
    if (i === files.length - 1 && typeof (callBack) === 'function') { 
     var _ret = _.chain(result) 
      .uniqBy(function (x) { return x.url }) 
      .sortBy(function (x) { return x.title }) 
      .value(); 
     filterByConfigs(_ret, configs, function (filteredResult) { 
      callBack(filteredResult); 
     }); 
    } 
})} 

JSONファイルの読み取りと解析でこのエラーが発生します。しかし、独立して子アプリを実行すると、エラーや問題はありません。

undefined:1 

SyntaxError: Unexpected end of JSON input 
    at Object.parse (native) 
    at E:\Open Source Projects\src\cli\readFiles.js:30:37 
    at Array.forEach (native) 
    at readAsync (E:\Open Source Projects\src\cli\readFiles.js:29:11) 
    at E:\Open Source Projects\src\cli\readFiles.js:19:9 
    at E:\Open Source Projects\src\cli\getJsonFiles.js:18:13 
    at FSReqWrap.oncomplete (fs.js:123:15) 

JSONファイルサンプル:

[ 
    { 
    "title": "Document Manager", 
    "subTitle": "Document manager - indexing, Filter file and rename - delete - share document.", 
    "url": "https://play.google.com/store/apps/details?id=com.document.manager.filescanner&hl=en&gl=us", 
    "appId": "com.document.manager.filescanner", 
    "price": "0", 
    "minInstalls": 1000000, 
    "score": 4.2, 
    "version": "1.4" 
    }, 
    { 
    "title": "Mini Scanner - PDF Scanner App", 
    "subTitle": "Fast easy way to scanner, professional pdf documents, Support SD card + Send Fax", 
    "url": "https://play.google.com/store/apps/details?id=com.simplescan.miniscanner&hl=en&gl=us", 
    "appId": "com.simplescan.miniscanner", 
    "price": "0", 
    "minInstalls": 100000, 
    "score": 4.6, 
    "version": "1.0.9" 
    } 
] 

を得て、誰もが、まだこのような状況で立ち往生していますか?ありがとう。

+1

あなたはあなたの質問にjsonファイルのコンテンツを追加できますか? –

+1

@CiroSpaciari確かに。それは今そこにある。 –

+0

読み込んだ後に 'toString()'を呼び出してみてください。 –

答えて

0

私は、問題をシミュレートしようとしているコードを実行し、ファイルに不完全または壊れたjsonがあるときに取得します。読み取り/解析エラーを記録しようとすると、console.logの内容を確認できますか?

var fs = require("fs"); 
function readAsync(files, configs, callBack) { 
    var result = []; 
    files.forEach(function (item, i) { 

     console.log("reading file:", item); 
     try{ 
      result = result.concat(JSON.parse(fs.readFileSync(item, { encoding: 'utf8' }))); 
     }catch(ex){ 
      console.log("bad file :c :", item, ex); 
     } 
     if (i === files.length - 1 && typeof (callBack) === 'function'){ 
      callBack(result); 
     } 
    }); 
} 

readAsync([ "test.json" ], null, function(obj){ 
    console.log(obj); 
});