使用adm-zip从zip中读取json文件

我试图读取一个zip文件,然后parsing压缩的根的json文件。

json文件被称为manifest.json,并将在我读的每个zip文件中被调用。

目前我有以下function

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')); } }); } 

但是,我在控制台中得到以下exception

 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数据我得到:

 ??{ " build " : " 4 . 8 . 7 2 1 9 " , " branch " : " stephen " , " timestamp " : " 1 5 - 0 1 - 2 0 1 4 0 9 : 0 6 : 2 7 " } 

这是来自文件的正确数据,但每个字符之间没有空格。 但是,当我尝试和parsing它显然会引发错误'??' 问号在哪里? 我不完全知道如何正确使用adm-zip究竟是什么,我做错了从nodejs从zip读取json文件? 它不需要保存文件只是将其数据parsing到一个对象中。

感谢任何和所有的帮助。

也许这已经太迟了……但是我遇到了同样的问题。 你可以使用zipEntry.getData().toString('utf8')

解决了这个问题。

这是一个强大的shell脚本制作json文件然后将其写入脚本的方式。

我害怕我没有任何更多的信息,因为我没有写出原来的电源shell脚本,也没有修改的版本。