我试图读取一个zip文件,然后在zip的根目录解析一个json文件。
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 :(得分:1)
也许这太晚了......但我遇到了同样的问题。您可以使用zipEntry.getData().toString('utf8')
答案 1 :(得分:0)
解决了这个问题。
这是power shell脚本制作json文件然后将其写入脚本的方式。
我担心我没有更多的信息,因为我没有写原始的电源shell脚本,也没有修改版本。