2014-01-20 73 views
2

我試圖讀取zip文件,然後解析壓縮文件的根目錄下的json文件。從zip中讀取json文件與adm-zip

json文件被稱爲manifest.json,並將在我讀取的每個zip文件中調用它。

目前,我有以下功能

function getFileContents(directory){ 
    // reading archives 
    var zip = new AdmZip(directory); 
    var zipEntries = zip.getEntries(); // an array of ZipEntry records 

    zipEntries.forEach(function (zipEntry) { 
     if (zipEntry.entryName == "manifest.json") { 
      console.log('getData', zipEntry.getData()); 
      console.log('data',zipEntry.data.toString('utf8')); 
     } 
    }); 
} 

但是我在控制檯中

getData <Buffer ff fe 7b 00 0a 00 20 00 20 00 22 00 62 00 75 00 69 00 6c 00 64 0 
0 22 00 3a 00 20 00 22 00 34 00 2e 00 38 00 2e 00 37 00 32 00 31 00 39 00 22 00 
2c 00 0a ...> 

TypeError: Cannot call method 'toString' of undefined 
    at c:\direc\Custom_Modules\readZipFileModule\readZipFileModule.js:18:46 
    at Array.forEach (native) 

這個香港專業教育學院的背面以下異常嘗試:

function getFileContents(directory){ 
    // reading archives 
    var zip = new AdmZip(directory); 
    var zipEntries = zip.getEntries(); // an array of ZipEntry records 

    zipEntries.forEach(function (zipEntry) { 
     if (zipEntry.entryName == "manifest.json") { 
      var decompressedData = zip.readFile(zipEntry); 
      var data = zip.readAsText(zipEntry) 
      console.log(JSON.parse(data)); 
     } 
    }); 
} 

如果我我得到的console.log數據:

??{ 
    " b u i l d " : " 4 . 8 . 7 2 1 9 " , 
    " b r a n c h " : " s t e p h e n " , 
    " t i m e s t a m p " : " 1 5 - 0 1 - 2 0 1 4 0 9 : 0 6 : 2 7 " 
} 

這是來自文件的正確數據,但每個字符之間沒有空格。 但是,當我嘗試和解析它顯然會引發錯誤'??'問號從哪裏來?我不完全知道如何正確使用adm-zip究竟是從哪裏做錯了從nodejs中的zip讀取json文件?它不需要保存文件只是將其數據解析到一個對象中。

感謝您的任何和所有幫助。

+0

「??」似乎預期的請求是一個** jsonp **,真正的響應是一個簡單的** JSON **(在'JSON.parse(data)'似乎已經解析了) – Frogmouth

回答

0

解決了這個問題。

這是強制shell腳本製作json文件然後將其寫入腳本的方式。

我害怕我沒有任何更多的信息,因爲我沒有寫出原始的電源shell腳本和修改後的版本。

1

也許這是爲時已晚......但我有同樣的問題。您可以使用zipEntry.getData().toString('utf8')