2017-12-17 1 views
2

두 개의 노드 앱이 서로 관련되어 있습니다. 그들 중 하나는 하위 프로세스 exec 메소드를 사용하여 다른 하나로부터 호출됩니다.하위 프로세스에서 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 파일을 구문 분석 : 저명한 응용 프로그램에서, 나는이 방법으로 몇 가지 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); 
});