Читать JSON-файл из zip с помощью adm-zip
Я пытаюсь прочитать ZIP-файл, а затем проанализировать JSON-файл в корне 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, что именно я делаю не так, чтобы прочитать файл json из zip в nodejs? Не нужно сохранять файл, просто проанализируйте его данные в объекте.
Спасибо за любую помощь в этом.
2 ответа
Может быть, это слишком поздно... но у меня была такая же проблема. Ты можешь использовать zipEntry.getData().toString('utf8')
Решил проблему.
Это был способ, которым скрипт Power Shell создавал файл json, а затем записывал его в скрипт.
Боюсь, у меня нет больше информации, чем это, поскольку я не писал ни оригинальный сценарий Power Shell, ни измененную версию.