Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并JSON文件?_Javascript_Jquery_Json - Fatal编程技术网

Javascript 合并JSON文件?

Javascript 合并JSON文件?,javascript,jquery,json,Javascript,Jquery,Json,我发现的所有与此相关的问题都是关于组合JSON对象和/或字符串的。我正在使用一个名为“Fuse”的jQuery插件来搜索文件的内容(repo here:)。这是我目前掌握的代码 $.getJSON("data/bn1.json", function(data) { start(data); }); $.getJSON("data/bn2.json", function(data2) { start(data2); }); 两个JSON文件如下所示(为简洁起见,缩短): 要调用

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

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

$.getJSON("data/bn2.json", function(data2) {
    start(data2);
});
两个JSON文件如下所示(为简洁起见,缩短):

要调用的最后一个JSON文件(在本例中为
bn2.JSON
)是我搜索时显示的文件。我想搜索两个以上的文件(将来将是六个文件)。我的项目的完整JS文件在这里:(你也可以在那里找到我的JSON文件)


如果有人能给我指出正确的方向,我将不胜感激。

您的问题归结为“如何合并数组?”您可以使用

由于您将获得多个文件,因此最好是和。未经测试,但这应该让您开始:

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

万岁

您似乎不想搜索JSON文件。。。您似乎想要搜索对象。JSON只是一种传输格式。我们不知道您如何组合数据。你没有告诉我们这些数据是什么。我不知道我们能帮到你什么。你能把所有的文件作为JSON字符串,解析成对象,然后在本地缓存吗?您的搜索将针对这个组合的本地缓存,而不是单个文件。@kaveman我该怎么做呢?我对JSON不太熟悉,哈哈。请看下面Brad的答案-基本上就是我所说的。非常感谢你的帮助Brad!你帮我找到了一个解决方案。你要处理你的数据两次吗?为什么不按照我的回答使用jQuery 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
});
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);
});