组合JSON文件

Combine JSON files?

本文关键字:文件 JSON 组合      更新时间:2023-09-26

我发现的所有与此相关的问题都是关于组合JSON对象和/或字符串的。我正在使用一个名为"Fuse"的jQuery插件,用于搜索文件的内容(此处repo:https://github.com/krisk/Fuse)。这是我目前掌握的代码。

$.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文件)。

如果有人能为我指明正确的方向,我将不胜感激

您的问题归结为"如何合并数组?"您可以使用Array.concat().

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

由于您得到了多个文件,因此最好使用promise将这些文件打包并一次性处理。未测试,但这应该让你开始:

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
});

多亏了Brad,我想出了一个解决方案:

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);
});

万岁!