Javascript GET未获取整个json文件



我有一个很大的JSON文件,我的javascript代码没有在其中提取所有数据。我之所以知道这一点,是因为在FireFox的开发人员工具的"网络"选项卡中,它表示正在接收一个类似57301的数据结束标记,但文件中有528342行JSON。

我试着只获取,但我不断收到关于"等待"需要异步使用的错误,但我不熟悉异步函数的工作方式。在我的xmlhttp请求中,我将async标志设置为false。这是我让它与我正在运行的代码一起工作的唯一方法。

我正在引入带有lat、lon和altitude的json对象。我的JSON格式如下:

{"points":[
{"lat": 0, "lon": 0},
.
.
.
{"lat": 0, "lon": 0}]}

我的请求被编码为这样的

function get_json_data(){
var data = [];
var response = new XMLHttpRequest();
response.onreadystatechange = function(){
data_points = JSON.parse(this.responseText);
*** CONVERTING LAT/LON TO ARRAY AND PUTTING INTO DATA ***
});
response.open("GET", "http://url/path/to/json", false);
response.send();
return data;
}

它可以很好地处理一个没有那么大的JSON文件,可能有10000行。我如何才能让它与一个更大、500000行以上的JSON文件一起工作?

不管JSON大小如何,我认为这样的事情最好异步处理,因为你是从外部源(API、文件系统…(加载的。所以我建议你再尝试fetch()。遗憾的是,由于安全原因,jsbin和jsfiddle不允许我调用外部API,所以我无法制作交互式演示,但代码应该是这样的:

async function getData() {
const response = await fetch('<url here>');
const json = await response.json();
// Do stuff with JSON
}
========== OR ==========
function getData() {
fetch('<url here')
.then(res => res.json())
.then(data => {
doStuffWithData(data);
});
}

基本上,Fetch API返回一个响应,您需要对其进行处理(例如,检查状态是否为200 OK,请参阅https://developers.google.com/web/updates/2015/03/introduction-to-fetch)。在您的情况下,当您确保请求成功时,您将希望将响应转换为JSON对象,然后操作该JSON。

对于非常大的文件,可能需要查看Streams。Fetch API似乎确实支持这一点,请参阅这里的用法示例:https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams

最新更新