【问题标题】:Breaking up large JSON object分解大型 JSON 对象
【发布时间】:2016-10-06 20:57:55
【问题描述】:

我有很多文件需要上传到我的数据库,我正在通过浏览器执行此操作,而服务器在发送给它的数据方面存在大小问题,并且它拒绝了它。在这种情况下,服务器不受我的控制,因此我需要将这些对象分解为更小的对象,然后再将它们发送到服务器以插入数据库(如果重要,请重新思考数据库)。不需要插入它们的顺序,我只需要将文件分解成更小的部分。

我知道我需要一个循环,但我不明白如何循环 100 个对象,将它们保存为另一个对象,将它们发送到服务器,然后从 101 开始,依此类推......

遍历我得到的所有对象,但我无法弄清楚或找到示例。

下面的代码是为了它的目的而工作,但是它只会到 250 然后停止,它不会超过那个.....

var lineData = jsonData.theData;
var newData = [];
var newLine;
//Shows on the browser console how many objects there are in the data
console.log(jsonData.theData.length);

//Goes through the Data and grabs the first 1000 lines
    for(var i = 0; i< 250; i++){
    newLine = lineData[i]
    newData.push(newLine);
    console.log(lineData[i]);
    }

【问题讨论】:

  • 提示:创建数组数组。外部数组包含 100 个元素的内部数组。
  • 有什么方法可以让服务器管理员增加帖子大小?对我来说似乎是解决问题的最佳方法。
  • 我可以,但是我想以此作为学习经验。

标签: javascript loops object


【解决方案1】:

您需要做的就是遍历您的对象,并且对于每 100 个对象,推出您的新数组并重新开始。所以像:

var lineData = jsonData.theData;
var newData = [];

for (var i=0; i < lineData.length; i++) {
    newLine = lineData[i];
    newData.push(newLine);
    if (i && !(i % 100)) {
        // upload newData
        newData = [];
    }
}
// check if there's any data left
if (newData.length) {
    // upload the remaining data
}

【讨论】:

  • 其实对于初学者(和其他任何人)来说,分离职责会更有帮助:这样数据拆分和数据发送就不会交错。在这种情况下,您将避免“上传”逻辑重复并拥有更清晰的代码。
  • @zerkms 我明白了,你会怎么做?我们是否需要将每个 100 的数组保存为不同的变量?或者我们是否需要知道服务器已经完成了它的插入?
  • @illcrx 不是不同的变量,但正如我已经提到的 - 作为嵌套数组。所以你push当前数组到另一个数组,继续分裂。
  • 这能解决我的服务器大小导入问题吗?只是重构数据的原因是什么?
  • @illcrx 完全正确。关键是您将代码拆分为 2 个不同的逻辑部分:1. 更改数据形状以进行进一步处理 2. 处理它(上传)。这样你就有了一个更好的结构,不需要重复代码和冗余检查(就像这个答案一样)
猜你喜欢
  • 2017-08-20
  • 2022-06-15
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 2021-03-19
  • 2013-09-08
相关资源
最近更新 更多