4

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 を正しく使用する方法を完全には理解していません。ファイルを保存する必要はなく、そのデータをオブジェクトに解析するだけです。

これに関するすべての支援に感謝します。

4

2 に答える 2

3

多分これは遅すぎる...しかし、私は同じ問題を抱えていました。使用できますzipEntry.getData().toString('utf8')

于 2016-04-04T15:22:57.973 に答える
0

問題を解決しました。

これは、パワー シェル スクリプトが json ファイルを作成し、それをスクリプトに書き込む方法でした。

元のパワーシェルスクリプトも修正版も書いていないので、それ以上の情報はありません。

于 2014-01-21T08:27:10.190 に答える