2015-02-24 10 views
0

Я новичок в javaScript. Я уже понял, как создать объект из JSON-файла с помощью JSON.Parse(), и теперь мне нужно загрузить несколько локальных JSON в массив. Я некоторое время искал свою проблему, но все, что я нашел, было связано с одним файлом. Есть ли способ сделать это в чистом JS без каких-либо библиотек, таких как jQuery и т. Д.?Загрузите несколько файлов JSON в чистый JavaScript

P.S .: Нет необходимости работать с веб-сервером, иначе код выполняется локально.

+0

Даже JQuery чистый JavaScript, я думаю, что ты хотел сказать, обычный JS или ванильный JS (или когда речь идет о собственных API-интерфейсах браузеров). И если вы говорите о браузерах ... Я думаю, вам понадобится некоторая работа по доступу к локальным файлам, которые, как предполагается, находятся вне песочницы браузера. –

ответ

3

Для этого необходимо сначала получить фактические файлы. Затем вы должны разобрать их.

// we need a function to load files 
// done is a "callback" function 
// so you call it once you're finished and pass whatever you want 
// in this case, we're passing the `responseText` of the XML request 
var loadFile = function (filePath, done) { 
    var xhr = new XMLHTTPRequest(); 
    xhr.onload = function() { return done(this.responseText) } 
    xhr.open("GET", filePath, true); 
    xhr.send(); 
} 
// paths to all of your files 
var myFiles = [ "file1", "file2", "file3" ]; 
// where you want to store the data 
var jsonData = []; 
// loop through each file 
myFiles.forEach(function (file, i) { 
    // and call loadFile 
    // note how a function is passed as the second parameter 
    // that's the callback function 
    loadFile(file, function (responseText) { 
     // we set jsonData[i] to the parse data since the requests 
     // will not necessarily come in order 
     // so we can't use JSONdata.push(JSON.parse(responseText)); 
     // if the order doesn't matter, you can use push 
     jsonData[i] = JSON.parse(responseText); 
     // or you could choose not to store it in an array. 
     // whatever you decide to do with it, it is available as 
     // responseText within this scope (unparsed!) 
    } 
}) 

Если вы не можете сделать XML запрос, вы также можете использовать объект для чтения файла:

var loadLocalFile = function (filePath, done) { 
    var fr = new FileReader(); 
    fr.onload = function() { return done(this.result); } 
    fr.readAsText(filePath); 
} 
+0

methinks 'XMLHTTPRequest' возможно не wirking с локальными файлами без веб-сервера – Grundy

+0

@ Grundy chrome обычно жалуется. обычно работает в сафари. – royhowie

+0

Я не уверен с IE также :-) – Grundy

0

Следующая псевдо-фрагмент кода может помочь вам -

var myArray = []; 
for(... loop through your files ...) { 
    myArray.push(JSON.parse(your_file); 
} 
+0

Я уверен, что «цикл через ваши файлы» также является проблемой - не говоря уже о попытке прочитать локальный файл в Chrome – mplungjan

+0

Это не кажется правильным, согласно MDN, [JSON.parse()] (https: // developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) не поддерживает URI в качестве аргумента, как предполагает использование вами 'your_file'. – handle

0

Вы можете сделать что-то вроде этого:

var file1 = JSON.parse(file1); 
var file2 = JSON.parse(file2); 
var file3 = JSON.parse(file3); 
var myFileArray = [file1, file2, file3]; 
// Do other stuff 
// .... 
// Add another file to the array 
var file4 = JSON.parse(file4); 
myFileArray.push(file4); 

Если у вас уже есть массив не-разобраны файлов вы могли бы сделать это :

var myFileArray = []; 
for(var i=0; i<unparsedFileArray.length; i++){ 
    myFileArray.push(JON.parse(unparsedFileArray[i])); 
} 
+0

Это не кажется правильным, в соответствии с MDN, [JSON.parse()] (https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) не поддерживает URI как аргумент, как кажется вам использовать 'fileX'. – handle

Смежные вопросы