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

Javascript 使用adm-zip从zip读取json文件,javascript,json,node.js,adm-zip,Javascript,Json,Node.js,Adm Zip,我试图读取一个zip文件,然后在zip的根解析一个json文件 json文件名为manifest.json,在我读取的每个zip文件中都会被称为manifest.json 目前我有以下功能 function getFileContents(directory){ // reading archives var zip = new AdmZip(directory); var zipEntries = zip.getEntries(); // an array of Zip

我试图读取一个zip文件,然后在zip的根解析一个json文件

json文件名为manifest.json,在我读取的每个zip文件中都会被称为manifest.json

目前我有以下功能

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)
如果我获取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文件到底做错了什么?它不需要保存文件,只需将其数据解析为对象即可

感谢您的帮助。

解决了问题

这就是powershell脚本生成json文件然后将其写入脚本的方式


恐怕我没有比这更多的信息了,因为我既没有编写原始的powershell脚本,也没有编写修改后的版本。

可能已经太晚了。。。但我也有同样的问题。您可以使用
zipEntry.getData().toString('utf8')

“?”似乎预期的请求是一个jsonp,而实际的响应是一个简单的JSON(在
JSON.parse(data)之前)
似乎已经有了解析)
??{
     " 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 "
 }