2014-11-05 3 views
1

Все вопросы, которые я нашел в связи с этим, были связаны с объединением объектов JSON и/или строк. Я использую плагин jQuery под названием «Fuse», для поиска содержимого файлов (здесь репо: https://github.com/krisk/Fuse). Это код, который у меня есть до сих пор.Комбинировать файлы JSON?

$.getJSON("data/bn1.json", function(data) { 
    start(data); 
}); 

$.getJSON("data/bn2.json", function(data2) { 
    start(data2); 
}); 

Оба JSON файлы выглядеть следующим образом (укороченный, для краткости):

[ 
{ 
    "number": "001", 
    "name": "Cannon", 
    "rarity": "*", 
    "damage": "40", 
    "element": "Normal", 
    "description": "A nice, big Cannon!" 
}, 
{ 
    "number": "002", 
    "name": "HiCannon", 
    "rarity": "**", 
    "damage": "80", 
    "element": "Normal", 
    "description": "A nice, big Cannon!" 
}, 
{ 
    "number": "003", 
    "name": "M-Cannon", 
    "rarity": "***", 
    "damage": "120", 
    "element": "Normal", 
    "description": "A nice, big Cannon!" 
} 
] 

Последний JSON файл будет называться (в данном случае, bn2.json) является тот, который появляется при поиске , Я хочу искать в более чем двух файлах (это будет шесть файлов в будущем). Полный JS-файл для моего проекта находится здесь: https://github.com/IdeasNeverCease/Gingnet/blob/master/scripts/gingnet.js (вы также можете найти мои файлы JSON).

Если кто-то может указать мне в правильном направлении, я бы очень признателен.

+0

Не похоже, что вы хотите искать файлы JSON ... кажется, что вы хотите искать объекты. JSON - это просто транспортный формат. Как вы комбинируете свои данные, мы не знаем. Вы не сказали нам, что это за данные. Я не знаю, как мы можем вам помочь. – Brad

+0

Можете ли вы получить все файлы как строки JSON, проанализировать объекты, а затем кешировать локально? Ваш поиск будет против этого объединенного локального кеша, а не отдельных файлов. – kaveman

+0

@kaveman Как бы я это сделал? Я не очень хорошо знаком с JSON, ха-ха. –

ответ

0

Благодаря Брэду, я придумал решение:

var allData = []; 

$.getJSON("data/bn1.json", function(data) { 
    allData = allData.concat(data); 
    start(allData); 
}); 

$.getJSON("data/bn2.json", function(data2) { 
    allData = allData.concat(data2); 
    start(allData); 
}); 

Ура!

+0

Вы собираетесь обработать свои данные дважды? Почему бы не использовать библиотеку обещаний jQuery, как это было предложено в моем ответе? – Brad

+0

Второй пример, который вы дали, не работал с моим кодом. То, что у меня выше, является быстрым решением. Я намерен искать обещания, они звучат как хорошая идея. –

1

Ваш вопрос сводится к следующему: «Как объединить массивы?» Вы можете использовать Array.concat().

var allData = []; 
$.getJSON("data/bn1.json", function(data) { 
    allData = allData.concat(data); 
}); 

$.getJSON("data/bn2.json", function(data2) { 
    allData = allData.concat(data); 
}); 

Поскольку вы получаете несколько файлов, было бы лучше, чтобы use promises to wrap these all up и handle them all at once. Непроверенная, но это должно вам начать:

var urls = [ 
    'data/bn1.json', 
    'data/bn2.json', 
    'data/bn3.json' 
    // etc. 
]; 

var deferreds = []; 
$.each(urls, function (index, url) { 
    deferreds.push($.getJSON(url)); // Request all data simultaneously 
}); 

$.when.apply($, deferreds).then(function() { // We have all data, merge it 
    var data = []; 
    $.each(arguments, function (index, chunk) { 
    data = data.concat(chunk); 
    }); 
    start(data); // Do whatever you want to this new collection of data 
}); 
+0

Большое спасибо за помощь Брэд! Ты помог мне найти решение. –

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