合并JSON文件?

5

我找到的所有相关问题都是关于合并JSON对象和/或字符串的。我正在使用一个名为“Fuse”的jQuery插件,用于搜索文件内容(存储库在此处: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文件)。如果有人能指点我正确的方向,我将不胜感激。

看起来你不想搜索JSON文件,而是想搜索对象。JSON只是一种传输格式。我们不知道如何组合你的数据。你没有告诉我们那些数据是什么。我不确定我们如何帮助你。 - Brad
你能将所有文件作为JSON字符串获取,解析成对象,然后本地缓存吗?你的搜索将针对这个组合的本地缓存而不是单个文件。 - kaveman
@kaveman 我应该怎么做呢?我对JSON不是很熟悉,哈哈。 - NetOperator Wibby
1
请查看Brad的回答 - 本质上我所说的内容。 - kaveman
2个回答

3
你的问题归结为“如何合并数组?” 你可以使用Array.concat()
var allData = [];
$.getJSON("data/bn1.json", function(data) {
    allData = allData.concat(data);
});

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

由于你正在获取多个文件,最好使用承诺来包装所有这些文件并且一次性处理它们。未经测试,但这应该可以让你开始:

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!你帮我找到了解决方案。 - NetOperator Wibby

1
感谢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);
});

万岁!


你要对数据进行两次处理吗?为什么不像我回答中建议的那样使用jQuery Promise库呢? - Brad
你提供的第二个例子在我的代码中没有起作用。我上面的代码只是一个快速修复。我打算研究一下 Promise,听起来很不错。 - NetOperator Wibby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接